Змініть авторського Slug з Ім'я користувача на Псевдонім


13

Привіт спільноті,
чи можна змінити службове ім'я користувача за замовчуванням на прізвисько, якщо воно доступне?

За замовчуванням URL - це щось на кшталт: http: //domain.tld/author/ (admin ),
чи можна переписати та змінити на http: //domain.tld/author/ (псевдонім ), тому якщо користувач змінить прізвисько зі сторінки профіля слизька зміниться також на нове ім’я, яке дається користувачем?

дуже дякую!
Філіп


Я не думаю, що ви реально можете, немає запиту_вар, який знайде повідомлення, засновані на псевдонімі користувача, тому немає відповідної змінної для відображення прізвиська в правилі переписання. Вам доведеться додати свій власний порядок обробки запитів, щоб мати справу з запитами на псевдонім поряд із будь-яким кодом перезапису (теоретично це можливо, але я не думаю, що це було б елегантно на практиці).
t31о

Відповіді:


17

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

Зміна URL-адреси автора

У цьому питанні є дві частини: обробляти вхідні посилання з псевдонімом автора замість авторського кулі, а також генерувати URL-адреси авторських повідомлень із псевдонімом замість стандартного.

Перша частина вирішується за допомогою підключення до requestфільтра, перевірки, чи це авторський запит, і пошуку автора за прізвиськом замість слизи. Якщо ми знайдемо автора, ми змінимо параметри запиту, щоб використовувати ідентифікатор автора.

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 );
    }
}

Приємне рішення. Я ще не перевірив цього, але думаю, що ваш підхід справді хороший.
Ань Тран

А як щодо дублікатів авторських приємних імен? Чи потрібно про це турбуватися, чи WP піклується про це?
Дрю Бейкер

Як сказав @DrewBaker, може виникнути проблема із дублюються URL-адресами, якщо два профілі користувачів мають схожі імена. Скажімо, якщо користувач 1 редагував своє ім'я користувача як Джон, а є інший користувач із подібним ім’ям, обидва профілі користувачів мають один авторський URL як site.com/author/john. Чи можете ви сказати мені, чи є для цього виправлення?
Нетізен

Також якщо між назвою є пробіл, URL-адреса не буде працювати. Це відбувається з випадковими іменами користувачів, створеними за допомогою цього коду. Коли я спробував код на своєму кінці, він генерує випадкові імена користувачів, як Новий користувач 654937, і авторська URL-адреса виглядає як site.com/author/Newuser654937/. Ця URL-адреса не працюватиме, поки ми знову не змінимо ім’я профілю та не видалимо пробіли. Чи можете ви запропонувати рішення з ним?
Нетізен

@IamSJ: Не існує автоматичного запобігання дублюючих імен або недійсних символів. Це вам доведеться забезпечити самостійно. Напевно, найпростіше, якщо це зробити за допомогою другого способу, змінивши «ім’я приємного».
Ян Фабрі

1

Використовуйте цей плагін: http://wordpress.org/extend/plugins/display-name-author-permalink/

Хоча це не перевірено на 3.2.1. Я користувався ним без проблем.

Якщо під час активації плагіна ви отримаєте помилку заголовка, ви знайдете виправлення тут: http://wordpresscloaker.com/blog/how-to-fix-wordpress-plugin-does-not-have-a-valid-header -error.html


-3

простий спосіб - плагін 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;
}

3
На жаль, це не авторська база, яку користувач, на жаль, хоче змінити.
t31о
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.