WordPress-тема WPCommunity: аватар в меню

Добавить аватар пользователя в меню при авторизации в WP Community.

Как добавить аватар пользователя в меню при авторизации в WPCommunity? В этой статье мы рассмотрим, как модифицировать шаблон WPCommunity для WordPress, чтобы при авторизации пользователя в меню отображался его аватар. Это улучшит пользовательский интерфейс и сделает навигацию более персонализированной.

Пример того, как будет выглядеть аватар в меню шаблона WPCommunity для WordPress.

Для реализации данной функциональности потребуется внести изменения в файл functions.php дочерней темы.

  1. Откройте файл functions.php вашей дочерней темы.
  2. Добавьте следующий код:
/**
 * @param int $user_id
 *
 * @return false|string
 */
function custom_get_attachment_url( $user_id ) {
    $attachment_id      = get_user_meta( $user_id, \WPShop\WPCommunity\User::USER_META_AVATAR_ATTACHMENT, true );
    $attachment_blog_id = null;

    if ( is_multisite() ) {
        $attachment_blog_id = get_user_meta( $user_id, \WPShop\WPCommunity\User::USER_META_AVATAR_ATTACHMENT_BLOG, true );

        /**
         * @since 1.0
         */
        $attachment_blog_id = apply_filters( 'wpcommunity/user/attachment_blog_id', $attachment_blog_id, $user_id );
    }

    $attachment_blog_id && switch_to_blog( $attachment_blog_id );

    $url = wp_get_attachment_url( $attachment_id );

    $attachment_blog_id && restore_current_blog();

    return $url;
}

add_action( 'wpcommunity/theme/init', function () {
    remove_filter( 'nav_menu_item_title', [
        \WPShop\WPCommunity\theme_container()->get( \WPShop\WPCommunity\User::class ),
        '_replace_profile_title',
    ] );

    add_filter( 'nav_menu_item_title', function ( $title, $menu_item ) {
        if ( $menu_item->type === 'post_type' &&
             $menu_item->object === 'page' &&
             $menu_item->object_id == \WPShop\WPCommunity\get_setting( 'page.profile' )
        ) {
            if ( is_user_logged_in() ) {
                $user_id = get_current_user_id();
                if ( $avatar_url = custom_get_attachment_url( $user_id ) ) {
                    $title = sprintf(
                        '<img src="%1$s" width="24" height="24" alt="%2$s" title="%2$s" style="border-radius: 4px">',
                        $avatar_url,
                        \WPShop\WPCommunity\get_user_name( $user_id )
                    ) . ' Мой профиль';
                } else {
                    $title .= ' (' . \WPShop\WPCommunity\get_user_name( $user_id ) . ')';
                }
            } else {
                $title = __( 'Sign In', 'wpcommunity' );
            }
        }

        return $title;
    }, 10, 2 );
}, 20 );

Объяснение кода:

  • Функция custom_get_attachment_url получает URL аватара пользователя.
  • add_action и add_filter используются для модификации отображения элементов меню.
  • Код проверяет, авторизован ли пользователь, и если да, отображает его аватар.

Важные замечания:

  • Убедитесь, что у вас есть права на редактирование файлов темы.
  • Рекомендуется создать резервную копию файла functions.php перед внесением изменений.
  • После внесения изменений проверьте работу сайта.

Следуя данной инструкции, вы сможете добавить отображение аватара пользователя в меню при авторизации, что значительно улучшит пользовательский опыт на вашем сайте.

Комментарии: 0