Intereting Posts
Проверьте версию внешней библиотеки Enqueue'd WP Cron не работает после перерыва Создать биографии Именование страниц, когда есть подкатегория только иногда. Как register_post_type знает, как и какую функцию использовать из функции add_action? Cant удалить строку, которая появляется над содержимым страницы Пользовательский тип сообщения Постоянная ссылка / Переписать не работает сразу Интеграция API конверсии валюты в разработке пользовательских плагинов Обновление WordPress с помощью SFTP вместо FTP Фильтр yoast canonical add_action priority Текущее имя таксономии (не термин!), Учитывая идентификатор сообщения Изменить ссылку в архиве виджетов Извлеките изображение из содержимого, назначьте его как признак, а затем удалите его из содержимого Как перечислить все активные и конкретные короткие коды в wordpress Sublime Video: плейлист, который получает все прикрепленные видео

Отображение имени входа в систему в 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.

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

Solutions Collecting From Web of "Отображение имени входа в систему в WordPress Menu"

Хорошо, я нашел решение (и его можно использовать для любой темы, с любым плагином, поскольку он использует только основные функции 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; } 

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