WordPress插件:PHP最佳实践

zte4gxcn  于 2023-01-29  发布在  PHP
关注(0)|答案(2)|浏览(143)

我写了一个wordpress插件,它可以从ACF字段中读取值并输出图像。图像是通过一个短代码获取的。
我是一个初学者,对此有一些问题:

  • 这种方法对性能有影响吗?
  • 哪种解决方案是最佳做法或更高效?
  • 是否有可能优化插件的代码?

例如,将图像设置为“全局”不是更好吗?如果一个图像发生变化,我必须在所有地方都进行更改,这是一项很大的工作。

$auswahl = get_field('dunstesse_energielabel');
    if( $auswahl == 'A'){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-A-re.png">' ;
    } else if ( $auswahl == 'B' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-B-re.png">' ;
    } else if ( $auswahl == 'C' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-C-re.png">' ;
    } else if ( $auswahl == 'D' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-D-re.png">' ;
    } else if ( $auswahl == 'E' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-E-re.png">' ;
    } else if ( $auswahl == 'F' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-F-re.png">' ;
    } else if ( $auswahl == 'G' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-G-re.png">' ;
    }              
        return $result;
}
add_shortcode('getEnergieDunstesse' , 'get_energie_dunstesse');

function get_energie_flachschirmhaube() {
    $auswahl = get_field('flachschimhaube_energielabel');
    if( $auswahl == 'A'){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-A-re.png">' ;
    } else if ( $auswahl == 'B' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-B-re.png">' ;
    } else if ( $auswahl == 'C' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-C-re.png">' ;
    } else if ( $auswahl == 'D' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-D-re.png">' ;
    } else if ( $auswahl == 'E' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-E-re.png">' ;
    } else if ( $auswahl == 'F' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-F-re.png">' ;
    } else if ( $auswahl == 'G' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-G-re.png">' ;
    }              
        return $result;
}
add_shortcode('getEnergieFlachschirmhaube' , 'get_energie_flachschirmhaube');

function get_energie_induktion() {
    $auswahl = get_field('induktions-kochfeld_energielabel');
    if( $auswahl == 'A'){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-A-re.png">' ;
    } else if ( $auswahl == 'B' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-B-re.png">' ;
    } else if ( $auswahl == 'C' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-C-re.png">' ;
    } else if ( $auswahl == 'D' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-D-re.png">' ;
    } else if ( $auswahl == 'E' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-E-re.png">' ;
    } else if ( $auswahl == 'F' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-F-re.png">' ;
    } else if ( $auswahl == 'G' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-G-re.png">' ;
    }              
        return $result;
}
add_shortcode('getEnergieInduktion' , 'get_energie_induktion');

function get_energie_glaskeramik() {
    $auswahl = get_field('glaskeramik-kochfeld_energielabel');
    if( $auswahl == 'A'){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-A-re.png">' ;
    } else if ( $auswahl == 'B' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-B-re.png">' ;
    } else if ( $auswahl == 'C' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-C-re.png">' ;
    } else if ( $auswahl == 'D' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-D-re.png">' ;
    } else if ( $auswahl == 'E' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-E-re.png">' ;
    } else if ( $auswahl == 'F' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-F-re.png">' ;
    } else if ( $auswahl == 'G' ){
        $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-G-re.png">' ;
    }              
        return $result;
}
add_shortcode('getEnergieGlaskeramik' , 'get_energie_glaskeramik');
x7yiwoj4

x7yiwoj41#

就代码可读性而言,您可以将每个函数重构为以下形式:

function get_energie_induktion() {
    $auswahl = get_field('induktions-kochfeld_energielabel');
    $defaultValue = <your-default-value>
    $allowedValues = ['A','B','C','D','E'];

    return in_array($auswahl, $allowedValues) ? 
        '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-'.$auswahl.'-re.png">'
        : $defaultValue;
}

对于$defaultValue,您需要指定在没有选择允许选项的情况下要返回的内容。
至于性能,这并不重要,你不会在易用性上优化这些东西,因为微优化是糟糕的优化。

j5fpnvbx

j5fpnvbx2#

从理论上讲,您的方法,不应该对性能要求过高,因为它只在短代码出现在页面或帖子上时才运行,但是,如果在同一个页面上多次调用get_field()函数,那么使用该函数可能会很慢。
你可以使用一个switch语句而不是多个if-else语句,这将使代码更可读和有效。为了优化插件的代码,你可以重构函数以使用switch语句。

function get_energie_dunstesse() {
    $auswahl = get_field('dunstesse_energielabel');
    switch ($auswahl) {
        case 'A':
            $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-A-re.png">';
            break;
        case 'B':
            $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-B-re.png">';
            break;
        case 'C':
            $result = '<img class="energie" src="/wp-content/uploads/EEK_Buttons_2021-C-re.png">';
            break;
        // and so on...
        default:
            $result = '';
    }
    return $result;
}

为了避免在任何地方更改图像,可以使用集中式方法,将图像URL存储在数组中,然后使用ACF字段的值作为键在函数中引用它们。

$images = [
    'A' => '/wp-content/uploads/EEK_Buttons_2021-A-re.png',
    'B' => '/wp-content/uploads/EEK_Buttons_2021-B-re.png',
    'C' => '/wp-content/uploads/EEK_Buttons_2021-C-re.png',
    // and so on...
];

function get_energie_dunstesse() {
    $auswahl = get_field('dunstesse_energielabel');
    if (isset($images[$auswahl])) {
        $result = '<img class="energie" src="'.$images[$auswahl].'">';
    } else {
        $result = '';
    }
    return $result;
}

您只需要在一个位置更新图像URL,而不是在代码中的多个位置更新。

相关问题