Author Slug를 Username에서 Nickname으로 변경


13

커뮤니티에서 안녕하세요
, 기본 사용자 이름 슬러그를 사용 가능한 경우 닉네임으로 변경할 수 있습니까?

기본적으로 URL은 http : //domain.tld/author/ (admin )
같습니다. 사용자가 자신의 닉네임을 변경하면 http : //domain.tld/author/ (nickname ) 로 다시 작성하고 변경할 수 있습니까? 프로필 페이지에서 슬러그는 사용자가 지정한 새 이름으로도 변경됩니까?

고마워요!
필립


나는 당신이 현실적으로 할 수 있다고 생각하지 않습니다. 사용자의 닉네임을 기반으로 게시물을 찾을 수있는 query_var이 없으므로 다시 쓰기 규칙에서 닉네임을 매핑하는 적절한 변수가 없습니다. 다시 쓰기 코드와 함께 별칭 쿼리를 처리하려면 자체 쿼리 var 처리를 추가해야합니다 (이론적으로 가능하지만 실제로 우아하지는 않다고 생각합니다).
t31os

답변:


17

이 문제를 해결하는 두 가지 방법이 있습니다 : 저자 URL을 구성하는 데이터 변경 또는 저자 URL 변경. 리디렉션도 처리해야하므로 사용자 아카이브의 이전 URL은 사용자가 닉네임을 변경할 때 계속 작동합니다.

작성자 URL 변경

이 질문에는 두 가지 부분이 있습니다. 저자 슬러그 대신 저자 닉네임으로 들어오는 링크를 처리하고 표준 슬러그 대신 닉네임으로 저자 게시물 URL을 생성합니다.

첫 번째 부분은 request필터 에 연결 하여 작성자 요청인지 여부를 확인하고 슬러그 대신 별명으로 작성자를 찾아서 해결됩니다. 저자를 찾으면 저자 ID를 사용하도록 쿼리 매개 변수를 변경합니다.

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

좋은 해결책. 아직 확인하지는 않았지만 귀하의 접근 방식이 정말 좋습니다.
Anh Tran

중복 된 저자 nicenames는 어떻습니까? 우리는 그것에 대해 걱정할 필요가 있습니까, 아니면 WP가 그것을 처리합니까?
Drew Baker

@DrewBaker가 말했듯이 두 사용자 프로필의 이름이 비슷한 경우 중복 URL에 문제가있을 수 있습니다. 사용자 1이 자신의 사용자 이름을 John으로 편집하고 비슷한 이름을 가진 다른 사용자가 있다고 가정하면 두 사용자 프로파일 모두 site.com/author/john과 같은 단일 작성자 URL을 갖습니다. 이것에 대한 해결책이 있는지 말해 줄 수 있습니까?
네티즌

또한 이름 사이에 공백이 있으면 URL이 작동하지 않습니다. 이 코드로 생성 된 임의의 사용자 이름으로 발생합니다. 내 코드를 시도하면 New user 654937과 같은 임의의 사용자 이름이 생성되고 author URL은 site.com/author/Newuser654937/와 같습니다. 해당 URL은 프로필 이름을 다시 변경하고 공백을 제거 할 때까지 작동하지 않습니다. 당신은 그것으로 해결책을 제안 할 수 있습니까?
네티즌

@IamSJ : 중복 이름 또는 유효하지 않은 문자에 대한 자동 예방은 없습니다. 이것을 직접 제공해야합니다. 아마도 "nicename"을 바꾸면서 두 번째 방법을 통해 가장 쉬운 방법 일 것입니다.
Jan Fabry


-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
사용자가 불행하게도 변경하고자하는 저자는 아닙니다.
t31os
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.