在footer.php中实现函数的正确方式是什么

时间:2015-04-06 作者:Kar19

我有一个Wordpress网站,主题是我创建的“Twenty15”。我添加了一段PHP代码,该代码根据显示的模板更改页脚背景。

这是我的代码部分:

/************************/
/***** Footer Color *****/
/************************/
$this_template = get_current_template(); 
//echo $this_template;

switch ($this_template) {
    case "about-us":
        $templates_color = \'white\';
        break;
    case "homepage":
        $templates_color = \'white\';
        break;
    case "clients_case-studies":
        $templates_color = \'blue\';
        break;        
    case "":
        $templates_color = \'blue\';
        break;
    case "Inner-page":
        $templates_color = \'blue\';
        break;
    case "Inner-page-nb-blue":
        $templates_color = \'blue\';
        break;
    case "Inner-page-nb-orange":
        $templates_color = \'orange\';
        break;
    case "Inner-page-orange":
        $templates_color = \'orange\';
        break;
    default:
       $templates_color = \'white\';
}

if ( ($templates_color == \'blue\') || ( $templates_color == \'yellow\' ) || ( $templates_color == \'orange\' ) ){
    $the_logo = \'white-logo.png\'; //goes for the logos url
    $white_text = \'style="color:white!important;"\'; // goes for the footers text
    $the_hr = \'whiteb-hr\'; //goes for the hrs
} 
else{
    $the_logo = \'yellow-logo.png\';
    $white_text = \'\'; // goes for the footers text
    $the_hr = \'\'; //goes for the hrs

}
我将变量添加到相关的HTML标记中。

我的问题是,这是用Wordpress编写代码的正确方法吗?或者我应该在函数中实现这个代码部分。php文件?如果是,共享变量的正确方式是什么?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我喜欢保持我的模板简洁,因为这个原因,庞大(或长段)的代码就像你问题中的代码一样,我倾向于将其移动到一个函数中,然后在我的模板中调用该函数或使用do_action() 呼叫。

我还将我的功能划分到不同的功能文件中,这样就不会出现functions.php 它有2000行长。这也有助于了解和记住特定函数的代码所在的位置。例如,所有与分页相关的函数都放在一个文件中,所有与页脚函数相关的代码都放在一个单独的文件中,等等。

在您的代码示例中,我还将添加函数get_current_template(); 编码到新函数中。整个功能get_current_template(); 可以简单地重写为新模板中的一行代码,如

$template_name = str_replace( \'.php\', \'\', get_post_meta( get_queried_object_id(), \'_wp_page_template\', true ) );
我还喜欢从函数返回值,而不是回显它们。原因是,有时您只需要返回值以便以后使用,如果您的函数响应这些值,则无法执行此操作。

我会将您的代码重写为以下事项中的函数

function get_styles_for_pages()
{
    /*
     * Immediately stop function and return null if this is not a page
     */
    if ( !is_page() )
        return null;

    /*
     * Use get_queried_object_id() to get current page id to get template name. Very reliable. 
     */ 
    $template_name = str_replace( \'.php\', \'\', get_post_meta( get_queried_object_id(), \'_wp_page_template\', true ) );

    switch ($template_name) {
        case "about-us":
            $templates_color = \'white\';
            break;
        case "homepage":
            $templates_color = \'white\';
            break;
        case "clients_case-studies":
            $templates_color = \'blue\';
            break;        
        case "":
            $templates_color = \'blue\';
            break;
        case "Inner-page":
            $templates_color = \'blue\';
            break;
        case "Inner-page-nb-blue":
            $templates_color = \'blue\';
            break;
        case "Inner-page-nb-orange":
            $templates_color = \'orange\';
            break;
        case "Inner-page-orange":
            $templates_color = \'orange\';
            break;
        default:
           $templates_color = \'white\';
    }

    if (   ($templates_color == \'blue\') 
        || ( $templates_color == \'yellow\' ) 
        || ( $templates_color == \'orange\' ) 
    ){

        $the_logo = \'white-logo.png\'; //goes for the logos url
        $white_text = \'style="color:white!important;"\'; // goes for the footers text
        $the_hr = \'whiteb-hr\'; //goes for the hrs

    } else {

        $the_logo = \'yellow-logo.png\';
        $white_text = \'\'; // goes for the footers text
        $the_hr = \'\'; //goes for the hrs

    }

    /*
     * Built an array to return our values
     */
    $array = array(
        \'the_logo\' => $the_logo,
        \'white_text\' => $white_text,
        \'the_hr\' => $the_hr
    );

    return $array;
}
你可以这样称呼它

$array = get_styles_for_pages();
    echo $array[\'the_logo\'];
    echo $array[\'white_text\'];
    echo $array[\'the_hr\'];

结束

相关推荐

在加载plugins_后,get_plugins()不工作

知道为什么下面的代码function my_plugin_load() { get_plugins(); } add_action( \'plugins_loaded\', \'my_plugin_load\' ); 抛出此错误?Fatal error: 不应调用未定义的函数get\\u plugins()get_plugins() 定义在plugins_loaded 胡克开火了?如果不是,那么什么才是合适的钩子呢?(这个钩子应该启动插件的引导/加载过程)