Вопрос или проблема
Я хочу создать свое собственное навигационное меню с помощью скрипта в плагине WP. Я почти достиг цели, используя этот учебник. Все, что мне нужно, это возможность удалять элементы меню.
что-то вроде wp_delete_nav_menu_item($menuID, $itemID);
В качестве альтернативы я мог бы создать новое меню, используя wp_create_nav_menu($menu_name); чтобы мне не нужно было удалять стандартные элементы меню, с которым я в противном случае работал бы. Проблема в том, что тема предоставляет варианты для положения меню, такие как ‘header’, и я не знаю, как я могу определить положение для вновь созданного меню.
Надеюсь, кто-то сможет дать совет, чтобы я мог решить одну из этих проблем. Спасибо!
Вот код, с которым я работал до сих пор. Мне нужен код для части, чтобы удалить стандартные элементы.
//Добавить меню
//Получить ID меню
$mymenu = wp_get_nav_menu_object('Header');
$menuID = $mymenu->term_id;
//Проверить, существует ли меню
if( !$mymenu ) {
//Меню существует -> Удалить стандартные элементы
//
} else {
//Меню не существует -> Создать его
$menuID = wp_create_nav_menu('Header');
}
//Создать новые элементы меню
//Создать родительские элементы меню
$myPage = get_page_by_title( 'Home' );
$itemData = array(
'menu-item-object-id' => $myPage->ID,
'menu-item-parent-id' => 0,
'menu-item-position' => 1,
'menu-item-object' => 'page',
'menu-item-type' => 'post_type',
'menu-item-status' => 'publish'
);
wp_update_nav_menu_item($menuID, 0, $itemData);
Вот и всё.
//Этот код зарегистрирует расположение в WordPress.
//Вы можете назначить меню этому расположению.
add_action('init','register_my_menu');
function register_my_menu(){
register_nav_menus(array(
'header_navigation' => 'Навигация в заголовке'
));
}
Но мы еще не определили никаких расположений в теме.
Этот код будет использоваться в теме, где вы хотите, чтобы ваше меню было отображено.
<?php
wp_nav_menu($menu_args);
$menu_args = array(
'theme_location'=> 'header_navigation', //слаг из предыдущего кода.
'container' => true, //если вы хотите, чтобы вокруг вашего меню был div.
'menu_class' => 'nav', // Это добавит имя класса меню <ul>
);
?>
Ответ или решение
Удаление элементов навигационного меню с помощью скрипта в WordPress
Ваша задача заключается в том, чтобы создать пользовательское навигационное меню в плагине WordPress и удалять элементы из уже существующего меню. Ниже представлено подробное руководство, как это сделать.
Шаг 1. Подготовка кода
В первую очередь, давайте убедимся, что у нас есть правильный идентификатор меню, которое мы хотим модифицировать. Это можно сделать с помощью функции wp_get_nav_menu_object()
. Если меню не существует, мы можем его создать с помощью wp_create_nav_menu()
.
// Получаем объект меню
$mymenu = wp_get_nav_menu_object('Header');
$menuID = $mymenu ? $mymenu->term_id : wp_create_nav_menu('Header');
Шаг 2. Удаление элементов меню
К сожалению, в WordPress нет функции wp_delete_nav_menu_item()
, но вы можете удалить элементы меню, используя функцию wp_update_nav_menu_item()
с атрибутом menu-item-status
равным ‘trash’. Однако, для удаления элемента вы должны знать его идентификатор.
Вот пример кода для удаления элемента меню:
function delete_menu_item($menuID, $itemID) {
if (wp_delete_nav_menu_item($itemID)) {
return true; // Успех
}
return false; // Неудача
}
// Пример использования
$itemID = 123; // Замените на ID элемента, который хотите удалить
delete_menu_item($menuID, $itemID);
Однако, заменить wp_delete_nav_menu_item
лучше использовать метод wp_update_nav_menu_item()
с установкой статуса trash
для соответствующего item_id
.
Шаг 3. Создание и привязка нового меню к позиции
Если вы решите создать новое меню вместо удаления элементов из существующего, вы можете зарегистрировать новое меню с помощью функции register_nav_menus()
. Обычно это делается в файле functions.php вашей темы или в плагине.
add_action('init','register_my_menu');
function register_my_menu() {
register_nav_menus(array(
'header_navigation' => 'Header Navigation',
));
}
Шаг 4. Отображение меню в теме
После создания и регистрации меню, вы можете отобразить его в своей теме, используя wp_nav_menu()
. Вот как это можно сделать:
<?php
$menu_args = array(
'theme_location' => 'header_navigation', // имя местоположения
'container' => true, // контейнер для меню
'menu_class' => 'nav', // класс для <ul>
);
wp_nav_menu($menu_args);
?>
Заключение
С помощью вышеописанных методов вы сможете управлять навигационным меню в вашем плагине WordPress. Удаление элементов меню и создание нового меню с назначением на определенную позицию — это два подхода, которые вы можете использовать в зависимости от ваших требований.
Не забудьте протестировать все изменения на локальной копии вашего сайта, чтобы убедиться, что все работает должным образом, прежде чем деплоить изменения на живой сайт. Это поможет избежать непредвиденных ошибок и даст возможность гибко адаптироваться к возникающим нюансам.
Пожалуйста, дайте знать, если у вас есть дополнительные вопросы или вы столкнулись с проблемами в процессе реализации.