Используя Shortcodes в WP-меню в WP 3.1 (через nav_menu_objects)?

Я нашел этот новый плагин

http://wpsmith.net/wordpress/creating-multiple-custom-menus-in-wordpress-3-1

это использует новые 3,1 рычага (wp_nav_menu_objects) для удаления определенных военно-морских пунктов меню из массива военно-морского пункта меню, прежде чем они будут проанализированы классом Уокера, если пользователь не зарегистрирован. Плагин использует определенный класс CSS в качестве идентификатора для решения который объекты удалить.

Таким образом, я задавался вопросом, не могло ли быть возможно использовать shortcodes в описаниях военно-морского пункта меню, чтобы иметь усовершенствованный набор условных выражений относительно дисплея определенных пунктов меню (как дисплей на странице x, не отображайтесь на странице y, или, особенно полезные: автоматическое включение дочерних страниц/категорий, и т.д. путем вставки их в массив nav_menu_item перед массивом анализируется Уокером),

Но добавление

add_filter(‘wp_nav_menu_objects’, ‘do_shortcode’);

заставляет страницу не загружаться правильно. Не пустая ошибка страницы, но страница прекращает представлять прямо после военно-морского меню containter отделение. Там какой-либо путь состоит в том, чтобы использовать собственный WP shortcode функциональность с этой целью? Или было бы необходимо создать пользовательский shortcode синтаксический анализатор в функции, анализируя военно-морское содержание объекта?

Спасибо за любые идеи!

2
25.02.2011, 10:06
3 ответа

Проблема - это do_shortcode() ожидает строку в, он - первые параметры в то время как wp_nav_menu_objects доберитесь передал массив объектов меню.

Су необходимо было бы записать собственную функцию обертки в do_shortcode, что-то вроде этого...

function my_nav_menu_objects_shortcode_mangler($items) {
    foreach ($items as $item) {
        $item->classes = explode(' ', do_shortcode(implode(' ', (array)$item->classes)));
    }
    return $items;
}

может работать. Необходимо было бы узнать о структуре военно-морских объектов меню ($item) путем рассмотрения источника в wp-includes/nav-menu-template.php и затем произойдите, какие свойства лучше всего для изменения и как (какой формат они имеют, как преобразовать это в строку, таким образом, можно выполнить shortcode по нему, и т.д.).

Казалось бы мне, тем не менее, что другие средства реализации такой логики могли бы быть лучше, чем взламывание shortcode функциональность в него.

Также обратите внимание, что с помощью той модели Вы не можете иметь shortcode в одном свойстве Вашего пункта меню и ожидать, что это для изменения вывода другого... как Вы не может иметь shortcode в Вашей метке пункта меню и надеяться, что добавляет или удаляет классы CSS. Просто не прокладывает себе путь.

1
19.02.2020, 22:41

Что происходит, если Вы изменяете приоритет на, скажем, 11?

add_filter(‘wp_nav_menu_objects’, ‘do_shortcode’, 11);

Это - то, как фильтр добавляется к the_content в shortcodes.php. См.: http://codex.wordpress.org/Function_Reference/do_shortcode

0
19.02.2020, 22:41

На самом деле было бы лучше изменить этот код, который использует Описания меню

-1
19.02.2020, 22:41

Теги

Похожие вопросы