2015-06-02 2 views
0

На моем сайте WordPress у меня есть требование показать ссылки private в основной навигации (через wp_nav_menu), даже если пользователь не вошел в систему (мне просто нужно показать ссылку, а не изменять, кто может просматривать фактический контент).Wordpress - как показать ссылки на «частные» страницы в wp_nav_menu?

Я могу сделать это в другом месте, используя wp_list_pages and, указав post_status (ы), которые я хочу отобразить, но я не вижу, как применить это к wp_nav_menu.

Это работает:

wp_list_pages(array(
    'title_li'  => '', 
    'child_of'  => $page->ID,  
    'post_status' => 'published,private' 
)); 

Есть ли способ сделать что-то подобное с этим?

wp_nav_menu(array(
    'menu'    => 'primary', 
    'theme_location' => 'primary', 
    'container'   => FALSE, 
    'walker'   => new MegaMenuWalker 
    'depth'    => 2)); 

Мои поиски до сих пор показывают кучу способов последующей обработки результатов отфильтровывать личные страницы (или проекты), используя wp_get_nav_menu_items крюк, но я до сих пор, чтобы включить что-то делать наоборот.

Я полагаю, что мог бы выполнить пользовательский запрос, чтобы захватить элементы таким образом, но это не позволило бы мне использовать мой пользовательский ходок.

Tantalizingly wp_get_nav_menu_items($menu, $args), который позволяет мне указать аргумент post_status, однако мне остается применить свой собственный рендер, а не использовать ходун ... если не существует способа использовать ходунок вне контекста wp_nav_menu?

ответ

0

wp_nav_menu функция только проходит через ссылки в нужном меню, и это их не достает. Как видно из исходного кода (line 270), функция, которая извлекает ссылки, получает только имя/id/etc. меню, а не любые другие аргументы.

От manual:

Отображает навигационное меню создается в Appearance → Меню панели.

Учитывая параметр theme_location, функция отображает меню , назначенное этому местоположению. Если такого места не существует или нет назначенного ему , параметр fallback_cb определит, что отображается .

Если не задан параметр theme_location, функция отображает

  • из меню согласования ID, пробковая или имени, данное параметром меню;
  • в противном случае первое непустое меню; в противном случае (или если меню задано по меню пустым), выход функции, заданной параметром fallback_cb (wp_page_menu(), по умолчанию);
  • в противном случае ничего.

Таким образом, вам нужно добавить эти рядовой страницы в меню с помощью панели WP администратора или создать функцию самостоятельно, который извлекает страницы и построить меню (пожалуйста, обратите внимание: не nav_walker как это просто использовать данные и не извлекать их).

+0

Спасибо - я посмотрю, что он делает, если я вручную вставляю ссылку в меню. Мои меню в настоящее время настроены для извлечения всех детей по любой глубине. Обычно я вручную настраиваю меню верхнего уровня, но оставляю его для сортировки подменю (в противном случае вам придется курировать всю вещь, которая является перетаскиванием). Есть ли какой-либо чистый способ сделать свой собственный поиск данных (т. Е. Обойти любые запросы, связанные с wp_nav_menu), а затем использовать ходунок для рендеринга элементов? –

+0

Да, страницы, вставленные вручную в навигацию, выглядят так. Вид боли, которую нужно делать вручную, но лучше, чем ничего. Благодаря! –

+0

Добро пожаловать. удачи –

2

Вот короткий отрывок, чтобы показать Частные страницы в строителе меню:

add_filter('nav_menu_meta_box_object', 'show_private_pages_menu_selection'); 
/** 
* Add query argument for selecting pages to add to a menu 
*/ 
function show_private_pages_menu_selection($args){ 
    if($args->name == 'page') { 
     $args->_default_query['post_status'] = array('publish','private'); 
    } 
    return $args; 
} 

Добавить это пользовательский плагин или к вашей теме functions.php, и вы будете иметь возможность добавлять частные страницы в любое меню.

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