Вопрос или проблема
У меня есть веб-сайт, и я хочу автоматически добавлять категории в мое меню. Я имею в виду, что когда я создаю новую категорию, она должна появляться в моем меню. Как я могу это сделать?
<?php wp_nav_menu( array( 'theme_location' => 'header', 'container' => '' ) ); ?>
Главная | Категории | Контакт
категория1
категория2
категория3
Что-то вроде этого должно хотя бы помочь вам начать. Вам сначала нужно зарегистрировать меню и получить ID. Я не дошел до удаления категорий, но вам нужно будет позаботиться об этом тоже.
Это в значительной степени не тестировалось. Сначала сделайте резервную копию своей базы данных!!
add_action( 'created_category', 'my_update_category_menu' );
add_action( 'delete_category ', 'my_delete_category_menu' );
function my_update_category_menu ($cat) {
$category = get_category($cat);
$menu_id = вашIDМенюЗдесь; // <--------- ВАШ ID
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __($category->name),
'menu-item-classes' => $category->name,
'menu-item-url' => home_url( get_category_link( $category->term_id ) ),
'menu-item-status' => 'publish')
);
}
function my_delete_category_menu ($cat) {
$category = get_category($cat);
// не уверен, как получить обратный поиск, но элементы меню хранятся как посты
// http://codex.wordpress.org/Function_Reference/wp_delete_post
}
Если вы хотите массово добавить существующие категории (хотя это довольно легко сделать вручную через админку), что-то вроде этого должно сработать. Запустите это один раз и удалите из вашего functions.php.
$categories = get_categories();
foreach($categories as $category) {
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __($category->name),
'menu-item-classes' => $category->name,
'menu-item-url' => home_url( get_category_link( $category->term_id ) ),
'menu-item-status' => 'publish')
);
}
Я добавил это в functions.php, но ничего не случилось
add_action( 'created_category', 'my_update_category_menu' );
add_action( 'delete_category ', 'my_delete_category_menu' );
function my_update_category_menu ($cat) {
$category = get_category($cat);
$menu_id = 'menu-primary-menu'; // <--------- ВАШ ID
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __($category->name),
'menu-item-classes' => $category->name,
'menu-item-url' => home_url( get_category_link( $category->term_id ) ),
'menu-item-status' => 'publish')
);
}
function my_delete_category_menu ($cat) {
$category = get_category($cat);
// не уверен, как получить обратный поиск, но элементы меню хранятся как посты
// http://codex.wordpress.org/Function_Reference/wp_delete_post
}
.
Ответ или решение
Для автоматического добавления категорий в меню вашего сайта на WordPress, вам нужно использовать очистку, чтобы программно обновлять меню при создании и удалении категорий. Ваша просьба понятна, и ниже приведено подробное пошаговое руководство по реализации данной функциональности через редактирование файла functions.php
.
Шаг 1: Регистрация действий
Вам необходимо зарегистрировать действия для события создания и удаления категорий. Это делается с помощью хуков add_action()
. Вот пример, как это можно реализовать:
add_action('created_category', 'my_update_category_menu');
add_action('delete_category', 'my_delete_category_menu');
Шаг 2: Обновление меню при создании категории
Функция my_update_category_menu()
будет отвечать за добавление новой категории в ваше меню. Обратите внимание, что вам необходимо указать ID вашего меню, который вы можете найти в админке WordPress:
function my_update_category_menu($cat) {
$category = get_category($cat);
$menu_id = 'menu-primary-menu'; // Замените на фактический ID вашего меню
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __($category->name),
'menu-item-classes' => 'menu-item-' . esc_attr($category->slug),
'menu-item-url' => home_url(get_category_link($category->term_id)),
'menu-item-status' => 'publish'
));
}
Шаг 3: Удаление категории из меню
Функция my_delete_category_menu()
должна будет удалять элементы меню при удалении дублирующихся категорий. В этом случае вам нужно будет получить ID элемента меню, который соответствует категории. К сожалению, WordPress не предоставляет простого способа сделать это напрямую, но можно использовать подход с нахождением элементов по названию:
function my_delete_category_menu($cat) {
$category = get_category($cat);
$menu_id = 'menu-primary-menu'; // Замените на фактический ID вашего меню
// Получаем элементы меню
$menu_items = wp_get_nav_menu_items($menu_id);
foreach ($menu_items as $item) {
if ($item->title == $category->name) {
wp_delete_post($item->ID, true);
break; // Выход из цикла после удаления
}
}
}
Шаг 4: Первоначальное добавление существующих категорий
Если у вас уже есть категории, которые вы хотите добавить в меню, вы можете выполнить это единовременно. Поместите следующий код в functions.php
, выполните его один раз, а затем удалите:
$categories = get_categories();
$menu_id = 'menu-primary-menu'; // Убедитесь, что ваш ID меню правильный
foreach ($categories as $category) {
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __($category->name),
'menu-item-classes' => 'menu-item-' . esc_attr($category->slug),
'menu-item-url' => home_url(get_category_link($category->term_id)),
'menu-item-status' => 'publish'
));
}
Устранение проблем
Если после добавления кода в functions.php
ничего не произошло, проверьте следующее:
- Корректность ID меню: Убедитесь, что вы использовали правильный ID вашего меню.
- Ошибки в синтаксисе: Убедитесь, что PHP-код не содержит синтаксических ошибок.
- Кэширование: Включите или очистите кэш вашего сайта. Бывает, что кэш мешает увидеть изменения.
Заключение
Интеграция функций для автоматического добавления и удаления категорий из меню вашего сайта WordPress — это отличный способ сделать ваш сайт более динамичным и улучшить пользовательский интерфейс. Правильно реализовав этот код в functions.php
, вы сможете управлять категориями интуитивно и без лишних усилий. Не забудьте сделать резервную копию базы данных перед внесением изменений, чтобы избежать потери данных.