WordPress functions.php问题

时间:2010-01-29 09:48:14

标签: php wordpress function blogs

functions.php文件中的函数可以调用functions.php中的另一个函数吗?我猜是的,这就是为什么我编写下面的代码,但由于某种原因它不起作用。任何人都可以看看并帮助我。

我尝试从register_sidebar()

调用pageBarColor()

感谢。

<?php
if (function_exists('register_sidebar')) {
  register_sidebar(array(
   'before_widget' => '<li class="sidebarModule">',
   'after_widget' => '</li><!-- end module -->',
   'before_title' => '<h2 class="moduleTitle '.pageBarColor().'">',
   'after_title' => '</h2>',
  ));
}

function pageBarColor(){
    if(is_category('3')) {
        return "color1";
    } elseif(is_category('4')) {
        return "color2";
    } elseif(is_category('5')) {
        return "color3";
    } elseif(is_category('6')) {
        return "color4";
    } elseif(is_category('7')) {
        return "color5";
    }
}
?>

1 个答案:

答案 0 :(得分:2)

问题可能是当你致电register_sidebar时,Wordpress尚未执行确定is_category结果的代码。如果您在定义它之后尝试直接调用pageBarColor函数,您将发现它不会返回任何内容。解决此问题的一种方法是挂钩dynamic_sidebar_params过滤器(在模板中调用dynamic_sidebar时调用,假设您这样做)并更新小部件before_title值,像这样:

function set_widget_title_color($widgets) {
    foreach($widgets as $key => $widget) {
        if (isset($widget["before_title"])) {
            if(is_category('3')) {
                $color = "color1";
            } elseif(is_category('4')) {
                $color = "color2";
            } elseif(is_category('5')) {
                $color = "color3";
            } elseif(is_category('6')) {
                $color = "color4";
            } elseif(is_category('7')) {
                $color = "color5";
            }

            if (isset($color)) $widgets[$key]["before_title"] = str_replace("moduleTitle", "moduleTitle ".$color, $widget["before_title"]);
        }
    }
    return $widgets;
}
add_filter('dynamic_sidebar_params', 'set_widget_title_color');