Я использую 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 # на имя своего пользовательского владельца места в приведенном выше коде.
Извините, если я неправильно использовал термин «владелец места».