WordPress functions.php проблема

Может ли функция внутри файла functions.php вызывать другую функцию из functions.php? Я предполагаю, что да, и именно поэтому я написал код ниже, но он почему-то не работает. Кто-нибудь может проверить это и помочь мне.

Я попытался вызвать pageBarColor() из register_sidebar().

Спасибо.

<?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";
    }
}
?>

person Aayush    schedule 29.01.2010    source источник
comment
Пожалуйста, укажите, что не работает. Вы получаете сообщения об ошибках?   -  person Pekka    schedule 29.01.2010
comment
Нет сообщений об ошибках. Просто ничего не возвращает, страница загружается без изменений. На самом деле пространство, потому что я дал его там.   -  person Aayush    schedule 29.01.2010


Ответы (1)


Проблема, вероятно, в том, что при вызове 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');
person Richard M    schedule 29.01.2010
comment
эй, спасибо за ответ, но я ничего не знаю об действиях, поэтому не могли бы вы связать меня с необходимой страницей. Спасибо за ответ.. - person Aayush; 29.01.2010
comment
Я попробовал это, и я вызываю dynamic_sidebar в своей теме, но ничего не меняется. - person Aayush; 29.01.2010
comment
моя вина! Я не вызываю dynamic_sidebar в моем sidebar.php вместо этого у меня есть это: ‹?php if (!function_exists('dynamic_sidebar') || !dynamic_sidebar()) : ?› ‹li›‹! нет активных виджетов --›‹/li› ‹?php endif; ?› и остальная часть моей боковой панели сделана вручную. есть ли другой способ сделать изменения цвета. - person Aayush; 29.01.2010
comment
На этой странице кодекса Wordpress объясняются действия и фильтры (хотя действие dynamic_sidebar_params на самом деле не задокументировано): codex.wordpress.org /Plugin_API - person Richard M; 29.01.2010
comment
Это массив, который Wordpress передает функции фильтра, содержащий параметры для каждого виджета на боковой панели. - person Richard M; 30.01.2010
comment
Я добавил пример статической боковой панели в свой ответ на ваш дополнительный вопрос: stackoverflow.com/questions/2180689/ - person Jan Fabry; 04.02.2010