2014-08-13 3 views
1

У меня есть страница под названием «Магазин». На этой странице отображается пользовательское меню, которое содержит ссылки на такие категории, как «Книги», «Обувь» и т. Д. Всякий раз, когда я нажимаю одну из этих ссылок/категорий, она переводит меня на соответствующую страницу категории, например /category/books/.WordPress - отображать сообщения из категории на той же странице

Я не хочу, чтобы он перенаправлял меня на страницу категории, я хочу, чтобы она отображала сообщения на одной странице («Магазин»), на которые был нажат элемент меню. Единственная проблема, с которой я столкнулся, пытаясь выполнить это, заключается в том, что я не знаю, как изменить поведение пользовательского меню. Я не хочу, чтобы он перенаправлял меня, но вместо этого отправьте значение GET на на той же странице («Магазин»). Затем страница магазина примет значение GET и отобразит соответствующие сообщения.

Я знаю, как показывать сообщения из категории и т. Д. Я просто не знаю, как изменить поведение пользовательского меню.

Может ли кто-нибудь мне помочь? Буду признателен.

ответ

1

Оригинал Ответ:

Использование wp_get_nav_menu_items:

$menu_slug = 'YOUR_MENU_SLUG'; 
$menu_id = get_nav_menu_locations()[$menu_slug]; 
$menu_items = wp_get_nav_menu_items($menu_id); 

foreach($menu_items as $item){ 
    if($item->object == 'category'){ 
     print('<p>Title: ' . $item->title . '<br>ID: ' . $item->object_id . '</p>'); 
    } 
} 

wp_get_nav_menu_items возвращает массив элементов меню. Вы получаете несколько информации об элементе, например, тип (должность, категория, ...), идентификатор, заголовок и т. Д. См. http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items для получения полного списка объектов.

Надеется, что это помогает :)

Update:

Предполагая, что ваши настройки постоянной ссылки устанавливаются по умолчанию, следующий код выведет модифицированное меню, которое использует GET.

$menu = wp_nav_menu(array(
    'theme_location'=>'YOUR_MENU_LOCATION', 
    'echo'=>0, 
)); 
$new_url = $_SERVER['SCRIPT_NAME'] . '?shop_page=$1'; 
$menu = preg_replace('/href="[^"]*cat=(.+)"/', 'href="'.$new_url.'"', $menu); 
print($menu); 

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

+0

Итак, в основном я должен создать «пользовательское меню»? Невозможно остановить перенаправление на страницы категорий? –

+0

Да, есть! Как-то я пропустил аргумент 'echo'' wp_nav_menu' ... Если вы установите значение 0, код будет возвращен вместо напечатанного. Затем вы можете использовать регулярное выражение для изменения ссылок. Я работаю над примером и отредактирую свой ответ. – paolo

+0

Спасибо за ваше обновление. Единственная проблема, которую я вижу здесь, это тот факт, что всякий раз, когда я добавляю новую категорию, она не будет автоматически обновлять URL-адрес автоматически. Хотя все же кажется, что это единственный способ, и если нет ответов, которые решают эту проблему, я буду отмечать этот ответ как правильный. В любом случае, я голосую за ваш ответ, спасибо! –

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