이 문제를 해결하는 두 가지 방법이 있습니다 : 저자 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 );
}
}