Intereting Posts
Что я могу сделать для достижения этого эффекта: WIP -> Портфолио set_post_thumbnail_size vs add_image_size Как получить большой размер изображения сообщения? Удалите определенный shortcode из get_the_content () Объединить внутренний поиск с пользовательским поиском Google? Ограничить количество слов в заголовке сообщения shortcode – мне нужно отправить сообщение или загрузить другую страницу Какой бы крючок я должен использовать, это будет срабатывать, когда я открою сообщение для редактирования в WP back-end? Заполнение мета-окна с помощью списка избранных сообщений и назначение его пользовательским типам сообщений Экспортная таксономия (информационный бюллетень) с тегом изображения? Архивная страница с переписью нескольких таксономий Просмотр RSS-ленты с использованием разбивки на страницы Как создать страницу, в которой перечислены теги по начальной букве? Как получить посты по категориям и выбрав таксономический термин? Авторский архив только для пользовательского типа сообщения

Создание пунктов меню для каждой категории в wordpress

Мне нужно отобразить специальное меню на каждой странице категории в wordpress,

например, у меня 3 категории: лошадь, собака, кошка

Поэтому у меня должно быть 3 меню в меню «Настройки» с именем: лошадь, собака, кошка

с этим кодом в functions.php Я получаю все категории:

 $category_ids = get_all_category_ids(); foreach($category_ids as $cat_id) { $cat_name = get_cat_name($cat_id); $arr = $cat_name; } 

и с этим кодом в functions.php Я регистрирую меню:

 register_nav_menus( array( 'primary' => 'Main Navigation', 'secondary' => 'Footer Navigation', $arr )); 

но он не работает и регистрирует только последнюю категорию, я думаю, мы должны импортировать array register_nav_menus в foreach , но я не знаю, как это сделать

Думаю, вы ошибетесь. Параметр theme_location для wp_nav_menu() – это местоположение шаблона – то есть физическое местоположение в шаблоне, как определено / зарегистрировано Theme. Он не предназначен для произвольного количества местоположений на основе произвольного пользовательского контента.

Если вы хотите выводить меню для конкретных категорий в определенных местах шаблонов, вам будет лучше отключить условное меню категории, с отступлением от пользовательского навигационного меню. (Или, что еще лучше: условно вывести пользовательское настраиваемое навигационное меню с возвратом в меню категории.)

Например:

 <div id="cat-menu"> <?php // if the user has assigned a menu, use it if ( has_nav_menu( 'cat-menu' ) ) { wp_nav_menu( array( 'theme_location' => 'cat-menu' ) ); } // otherwise, if this is a category archive index page, // output a category menu else if ( is_category() ) { // output a list of categories } ?> </div> 

Тем не менее, ваша проблема в основном связана с проблемой PHP / синтаксиса. Вам нужно построить массив местоположений меню, а затем передать этот встроенный массив в функцию register.

 // Base menu locations $menu_locations = array( 'primary' => 'Main Navigation', 'secondary' => 'Footer Navigation' ); // Get categories $category_ids = get_all_category_ids(); // Loop through them foreach( $category_ids as $cat_id ) { // Get the Category object $cat_obj = get_category( $cat_id ); // Get the Category Slug $cat_slug = $cat_obj->slug; // Concatenate it as a menu slug $menu_slug = $cat_slug . '-menu'; // Get the Category Name $cat_name = $cat_obj->name; // Concatenate it as a menu name $menu_name = $cat_name . ' Menu'; // Now add it to the array of menu locations $menu_locations[$menu_slug] = $menu_name; } // Now register register_nav_menus( $menu_locations ); 

Из использования var_dump ($ arr) было похоже, что он все еще выплевывает массив, который WordPress не знал, что делать. То же самое с $ cat_name. Вы должны указать WordPress, для каждого идентификатора в этом массиве, который поступает из $ category_ids (который вы теперь вызываете $ cat_id для отдельных идентификаторов), вы хотите получить каждое из своих имен, а также зарегистрировать меню для каждого.

 <?php $category_ids = get_all_category_ids(); foreach($category_ids as $cat_id): $catName = get_cat_name( $cat_id ); register_nav_menu($cat_id, $catName); endforeach; ?> 

Я не уверен, есть ли более чистое решение, так что вам не нужно регистрировать_nav_menu несколько раз, но это работает. Надеюсь, поможет.

Также, если вам нужно больше объяснений по массивам, этот курс на tutsplus мне очень помог!