Intereting Posts
Получение тысяч спама регистрации WordPress не отправляет подтверждение по электронной почте новым зарегистрированным пользователям Пользовательская таксономия и тип сообщения с одинаковым слизнем Фильтр WordPress Ajax Как сделать поле заголовка обязательным для медиа-библиотеки? Ошибка подачи RSS-канала при остановке разбора шаблона страницы Отфильтровать поле имени пользователя при регистрации для профанации и нежелательных слов ACF Relationship – Исключить страницы, не созданные автором Показать быстрые фрагменты в WordPress Путь в dev-сервере работает; один и тот же путь в prod-сервере нарушен Страница автора Создать ссылку на страницу, которая отображает все сообщения автора? Как создать петицию как форму на основе пользовательских типов сообщений? Как отключить категорию без удаления? next_posts_link и previous_posts_link Как включить javascripts плагина (MailPoet), используя функции child.fp

Отображение имени входа в систему в WordPress Menu

Я использую WordPress с UserPro и хочу, чтобы в моем меню отображалось имя пользователя вошедшего пользователя, связанное с страницей профиля пользователя.

Проблема в том, что в моей структуре меню, в меню «Профиль», должно быть, есть подменю, содержащее «редактировать профиль», «отправить» и «выйти».

Это код, который я использую сейчас:

/*earlier code, currently commented out, for function to display username in menu using #profile_name# placeholder function give_profile_name($atts){ echo userpro_profile_data('first_name', get_current_user_id()); } add_shortcode('profile_name', 'give_profile_name'); add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' ); function my_dynamic_menu_items( $menu_items ) { foreach ( $menu_items as $menu_item ) { if ( '#profile_name#' == $menu_item->title ) { global $shortcode_tags; if ( isset( $shortcode_tags['profile_name'] ) ) { // Or do_shortcode(), if you must. $menu_item->title = call_user_func( $shortcode_tags['profile_name'] ); } } } return $menu_items; } end of earlier code */ //currently in use, unlinked code add_filter( 'wp_nav_menu_items', 'my_custom_menu_item'); function my_custom_menu_item($items) { if(is_user_logged_in()) { $user=wp_get_current_user(); $name=$user->user_firstname; $items .= '<li>'.$name.''; } return $items; } 

Я могу поиграть и попытаться добавить подменю под меню, переиграв код из Firebug, но это будет означать ручные изменения ко всем ссылкам в functions.php, что было бы утомительно.

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

Пожалуйста, порекомендуйте.

Хорошо, я нашел решение (и его можно использовать для любой темы, с любым плагином, поскольку он использует только основные функции WordPress).

В меню назовите пункт меню, в котором вы хотите, чтобы имя пользователя отображалось с помощью держателя места (см. Снимок экрана ниже). Пример: # profile_name #, # user #, # random #

введите описание изображения здесь

Теперь добавьте следующий код к функциям вашей дочерней темы.php:

 function give_profile_name($atts){ $user=wp_get_current_user(); $name=$user->user_firstname; return $name; } add_shortcode('profile_name', 'give_profile_name'); add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' ); function my_dynamic_menu_items( $menu_items ) { foreach ( $menu_items as $menu_item ) { if ( '#profile_name#' == $menu_item->title ) { global $shortcode_tags; if ( isset( $shortcode_tags['profile_name'] ) ) { // Or do_shortcode(), if you must. $menu_item->title = call_user_func( $shortcode_tags['profile_name'] ); } } } return $menu_items; } 

Если вы используете свой собственный держатель места, не забудьте заменить # profile_name # на имя своего пользовательского владельца места в приведенном выше коде.

Извините, если я неправильно использовал термин «владелец места».

Код:

 function give_profile_name($atts){ ... } 

дает предупреждение. Лучше:

 function give_profile_name(){ ... } 

И лучше определить, зарегистрирован ли пользователь или нет. Вот так:

 function give_profile_name(){ $user=wp_get_current_user(); if(!is_user_logged_in()) $name = "User not logged in"; else $name=$user->user_firstname.' '.$user->user_lastname; return $name; } 

Надеюсь это поможет.