Intereting Posts
Предупреждение: Недопустимое смещение строки – на главной странице Как правильно загружать файлы с пользователей Импорт живого сайта в локальную настройку без доступа к сайту offset и max_num_pages в галерее пагинации Определение версии WordPress из командной строки хоста? Невозможно получить paginations на single.php для работы с моими пользовательскими типами сообщений Как получить разный макет домашней страницы на основе URL-адреса и настроек Создать новое настраиваемое поле, которое вычисляет возраст Существуют ли риски безопасности при работе непосредственно в папке тем, которая встроена в папку темы? Разрешение электронной почты как имя пользователя? Ограничение видео о wordpress Является ли новая панель администратора WordPress 3.1 подключаемой и как ее можно расширить? Функция wp_get_update_data () выполняется при каждом запросе администратора Загрузка нескольких файлов с помощью media_handle_upload Пусть пользователь переопределяет плагин CSS

Как программно добавлять элементы в пользовательское меню

В моем пользовательском меню WP у одного элемента есть раскрывающийся список под ним, в котором перечислены все экземпляры некоторых CPT.

Единственный способ, которым я это знаю, – создать список в другом месте в DOM с PHP, а затем переместить этот список прямо в пользовательский пункт меню с помощью Javascript.

Проблема: для этого требуется Javascript.

Есть ли способ сделать то же самое, «взломав» функцию, которая создает пользовательское меню, так что, когда меню создается PHP, оно уже включает в себя эти списки экземпляров CPT?

Solutions Collecting From Web of "Как программно добавлять элементы в пользовательское меню"

То, что вы хотите, может быть сделано. Это вряд ли будет действительно чистым и аккуратным.

Вы можете выполнить это, используя пользовательский Walker Class для wp_nav_menu() когда вы его вставляете.

 class My_Walker_Class extends Walker_Nav_Menu { function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { $output .= sprintf( "\n<li><a href='%s'%s>%s</a></li>\n", $item->url, ( $item->object_id === get_the_ID() ) ? ' class="current"' : '', $item->title ); /** * Here you will need to add a conditional to see if the parent menu item was found * and if so go into a subroutine that grabs your CPT list. Add it all to $output. */ if ( $item->object_id == 111 ) // Match by ID { // Call external function that generates CPT list $output .= my_get_cpt_list(); } } } $args = array( 'theme_location' => 'my_theme_location', 'menu' => 'my_menu', 'container' => 'div', 'container_class' => '', 'container_id' => '', 'menu_class' => 'menu', 'menu_id' => '', 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', 'depth' => 0, 'walker' => new My_Walker_Class() ); wp_nav_menu( $args ); 

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