wp_list_categories в nav_menu

Вопрос или проблема

У меня есть веб-сайт, и я хочу автоматически добавлять категории в мое меню. Я имею в виду, что когда я создаю новую категорию, она должна появляться в моем меню. Как я могу это сделать?

  <?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 ничего не произошло, проверьте следующее:

  1. Корректность ID меню: Убедитесь, что вы использовали правильный ID вашего меню.
  2. Ошибки в синтаксисе: Убедитесь, что PHP-код не содержит синтаксических ошибок.
  3. Кэширование: Включите или очистите кэш вашего сайта. Бывает, что кэш мешает увидеть изменения.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...