2013-08-26 2 views
0

Я пытаюсь показать меню WordPress на основе значения cookie. В моем примере я использую файлы cookie для определения географического региона, который пользователь хочет просмотреть. (Я все еще работаю над этой частью, поэтому я определяю ее вручную во время разработки.) Исходя из этого, я хочу использовать либо menu1, либо menu2. В настоящее время я использую следующий код:Условное меню в WordPress

function pstv_set_cookie() { 
    $expire=time()+60*60*24*30; 
    setcookie("region", "1", $expire); 
} 
add_action('init', 'pstv_set_cookie'); 

    if ($_COOKIE[$region] = "1"){ 
     //Use Menu 1 
     wp_nav_menu(array('menu' => 'menu1')); 
     //wp_nav_menu(array('theme_location' => 'menu1')); 

    }elseif ($_COOKIE[$region] = "2"){ 
     //Use Menu 2 
     wp_nav_menu(array('menu' => 'menu2')); 
     //wp_nav_menu(array('theme_location' => 'menu2')); 
    } 

Это работает почти как ожидалось, но он выплевывает HTML меню, прежде чем что-либо еще.

Где я могу добавить свой код для вставки в меню WordPress?

Примечание: Я пробовал:

wp_nav_menu(array('menu' => 'menu2')); AND 
wp_nav_menu(array('theme_location' => 'menu2')); 

(я не слишком уверен, что разницы.) Заранее спасибо

+0

if ($ _COOKIE [$ region] = "1") использовать double равно '==' –

ответ

0

wp_nav_menu отображает меню навигации на месте, вы используете крючок инициализации, который выполняется перед чем-либо еще, как вы поняли.

Либо:

Пример применения фильтра (не проверено):

add_filter('wp_nav_menu_args', 'my_wp_nav_menu_args_filter'); 
function my_wp_nav_menu_args_filter($args = array()) { 
    $args['menu'] = 'menu1'; 
    return $args; 
} 
+0

Спасибо! Это работает. Единственная проблема заключается в том, что она влияет на мое основное и дополнительное меню и заменяет собой меню1. Попробуем найти обходное решение – TomC

+0

просто сделайте условное, если (args [menu] == menu1) – MarZab

+0

Я пробовал это, но он не работает ... if ($ args ['menu'] == "menu1") { \t \t \t $ args ['menu'] = "menu2";} \t \t return $ args; – TomC

Смежные вопросы