Изменить автора 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: :???: :?: :!: