У меня есть меню WordPress, в котором есть несколько элементов меню, которые я добавил через стандартную (перетаскивание) функцию меню администратора WordPress. Недавно мне пришлось добавить еще один элемент в меню, которое генерирует динамическую ссылку href. Я достиг этого, используя следующий код в файле functions.php:
// добавление элемента моего профиля в динамическом режиме в меню участников (сгенерируйте имя пользователя на основе текущего пользователя, входящего в систему)
- Использование do_shortcode в wordpress через вызов ajax
- Как добавить несколько кнопок для загрузки изображений без плагинов для wordpress
- set-post-thumbnail wp-ajax return 0
- Штрих-код шаблона WordPress не отображается
- бесконечная прокрутка (wordpress)
add_filter ('wp_nav_menu_items', 'add_profilelink_in_menu', 10, 2);
function add_profilelink_in_menu ($ items, $ args) {
if( $args->theme_location == 'secondary') { global $current_user; //converts user id to username $user_info = get_userdata($current_user->ID); $items .='<li id="menu-item-2091" class="menu-item menu-item-2091"> <a href="https://www.mysite.com/members/' . $user_info->user_login .'">Profile</a> </li>'; } return $items;
}
Моя проблема в том, что этот пункт меню добавляется в конец меню, и обычные классы меню WordPress, такие как «текущий пункт меню», не применяются к этому элементу. Есть ли способ контролировать положение, в котором этот элемент меню добавляется (например: добавить этот элемент после первых двух элементов?)
и как я могу заставить WordPress рассматривать этот динамически созданный пункт меню как обычный элемент меню и добавить ли он все классы, в которые он добавляет другие элементы меню (созданные с помощью функции меню WordPress)?
Спасибо за любую помощь.
Вот логика, которую вы можете использовать, используя jquery
//suppose your menu is this <ul id="secondary_nav"> <li id="li_unique_id_1"><a href="">menu 1</a></li> <li id="li_unique_id_2"><a href="">menu 2</a></li> <li id="li_unique_id_4"><a href="">menu 4</a></li> </ul> //the jquery workaround //place this in your footer <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script> <script type='text/javascript'> $(function(){ <?php global $current_user; //converts user id to username $user_info = get_userdata($current_user->ID); ?> $("<li id='menu-item-2091' class='menu-item menu-item-209'><a href='https://www.mysite.com/members/<?php echo $user_info->user_login; ?>'>Profile</a></li>").insertAfter("#secondary_nav #li_unique_id_2"); }); </script>
Вы также можете использовать функцию insertBefore
Вы проверили это меню в меню тем-> для этого? Вы можете легко добавить меню, и там вы также можете настроить собственное меню. Надеюсь, вам это поможет.