Изменить автора Slug с имени пользователя на псевдоним

Можно ли изменить в имени пользователя по умолчанию слаг на псевдоним?

По умолчанию URL-адрес выглядит так: http://domain.tld/author/ (admin),
Можно ли переписать и изменить на http://domain.tld/author/ (псевдоним), так что если пользователь изменит свой псевдоним со страницы профиля, то этот слаг будет также изменен на новое имя, данное пользователем?

Большое спасибо!

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 4
  1. bueltge

    Самый простой способ — это использовать плагин Author Slug. Также вы можете использовать небольшой код:

    add_action('init', 'set_new_author_base');
    function set_new_author_base() {
        global $wp_rewrite;
        $author_slug = 'new_slug';
        $wp_rewrite->author_base = $author_slug;
    }
    
  2. Jan Fabry

    Я вижу два способа решения этой проблемы: изменение данных, формирующих URL автора, или изменение URL автора. Вы, вероятно, должны обрабатывать и перенаправления, поэтому старые URL-адреса в пользовательских архивах продолжают работать, когда пользователь меняет свой ник.

    Изменение URL автора

    Этот вопрос состоит из двух частей: обрабатывать входящие ссылки с псевдонимом автора вместо слага автора и генерировать URL-адреса сообщений автора с псевдонимом вместо стандартного слага.

    Первая часть решается путем подключения к фильтру request , проверки, является ли это запросом автора, и поиска автора по псевдониму вместо slug. Если мы найдем автора, мы изменим параметры запроса, чтобы использовать идентификатор автора.

    add_filter( 'request', 'wpse5742_request' );
    function wpse5742_request( $query_vars )
    {
        if ( array_key_exists( 'author_name', $query_vars ) ) {
            global $wpdb;
            $author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $query_vars['author_name'] ) );
            if ( $author_id ) {
                $query_vars['author'] = $author_id;
                unset( $query_vars['author_name'] );    
            }
        }
        return $query_vars;
    }
    

    Вторая часть выполняется путем подключения к фильтру author_link и замены стандартной части автора (обозначенной $ author_nicename ) псевдонимом.

    add_filter( 'author_link', 'wpse5742_author_link', 10, 3 );
    function wpse5742_author_link( $link, $author_id, $author_nicename )
    {
        $author_nickname = get_user_meta( $author_id, 'nickname', true );
        if ( $author_nickname ) {
            $link = str_replace( $author_nicename, $author_nickname, $link );
        }
        return $link;
    }
    

    Изменение данных, которые формируют URL автора

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

    add_action( 'user_profile_update_errors', 'wpse5742_set_user_nicename_to_nickname', 10, 3 );
    function wpse5742_set_user_nicename_to_nickname( &$errors, $update, &$user )
    {
        if ( ! empty( $user->nickname ) ) {
            $user->user_nicename = sanitize_title( $user->nickname, $user->display_name );
        }
    }
    
    1. Netizen

      Также, если между именем есть пробел, URL не будет работать. Это происходит со случайными именами пользователей, созданными с помощью этого кода. Когда я попробовал код на моем конце, он генерирует случайные имена пользователей, такие как Новый пользователь 654937, а URL автора выглядит как site.com/author/Newuser654937/. Этот URL не будет работать, пока мы снова не изменим имя профиля и не удалим пробелы.

  3. t31os

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

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: