2013-12-07 2 views
0

У меня есть функция, которая возвращает значение, которое я хотел бы проверить через другое. Я не могу повторить его в первой функции, насколько мне известно, поскольку он используется в wordpress-фильтре для body_class и выводится там.PHP: Как проверить возвращаемое значение функции в другой функции

Итак, как я могу проверить, что возвращаемое значение в другой функции?

Пример первой функции, которая возвращает $ класса, который является то, что я хочу, чтобы проверить:

function layout_class($class) { 
    // There is lots of more functionality here for the $layout variable 
    $layout = 'col-3cm'; 

    $class[] = $layout; 
    return $class; 
} 
add_filter('body_class', 'layout_class'); 

Теперь этот класс решает, следует ли загружать дополнительный шаблон на боковую панель. Так что я хотел бы сделать:

function sidebar_dual() { 
    $layout = layout_class(); 
    if (
     ($layout == 'col-3cm') || 
     ($layout == 'col-3cl') || 
     ($layout == 'col-3cr') 
    ) 
    { get_template_part('sidebar-2'); } 
} 

Поскольку я не могу повторить из первой функции, и не хотят, чтобы написать еще одну функцию, как это довольно большой - как я подойти к нему? Есть ли простой способ проверить возвращаемое значение, похожее на эхо?

ответ

0

Похоже, что вам нужно реорганизовать код.

Вам просто нужно переместить код, определяющий расположение в отдельную функцию, которую можно назвать как внутри фильтра, так и внутри sidebar_dual() функции:

function get_layout_mode(){ 

    // There is lots of more functionality here for the $layout variable 
    $layout = 'col-3cm'; 

    return $layout; 
} 

Функция фильтра становится:

function layout_class($class) { 
    $class[] = get_layout_mode(); 
    return $class; 
} 
add_filter('body_class', 'layout_class'); 

И в вызове функции sidebar_dual()get_layout_mode() вместо layout_class()


Возможно также работать с вашим текущим кодом, разделив строку, возвращаемую функцией WP, в массив, а затем проверьте, присутствует ли какой-либо из этих 3 классов внутри массива. Я бы пошел с первым вариантом, хотя, потому что это яснее.

+0

Ах, конечно! Не думал об этом. Для вашего get_layout_mode() будет ли он работать для проверки sidebar_dual(), если он использует return вместо echo для $ layout? Полагаю, я дам ему выстрел и посмотрю. – Alx

+0

Не нужно эха в любом месте вашего кода выше. Я предполагаю, что вы ссылаетесь на функцию 'body_class()', которая перекликается с HTML, но это не мешает вашему коду. –

+0

Я думал, что не смог проверить возвращаемое значение с помощью 'something' через другую функцию и только проверить эхо, поскольку я столкнулся с проблемами с возвратом. Правда, новичок php здесь, хотя, обучаясь пробным и неудачным :-) – Alx

0

Если вы оставите $class пустым в своем layout_class($class), тогда ваша функция недействительна в любом случае. Вам нужно объявить что-то для переменной layout_class($class = null), или если вы ее назовете layout_class(null), но если вы ее не объявите, она не будет работать так, как вам нужно.

Остальная часть вашего кода в порядке.

Кроме того, вы объявили $class в своей функции, и вы используете его в качестве переменной внутри функции, я бы переименовать выход т.е.

function layout_class($class) { 
    // There is lots of more functionality here for the $layout variable 
    $layout = 'col-3cm'; 

    return $layout; 
} 
Смежные вопросы