web-dev-qa-db-ja.com

作成者スラッグをユーザー名からニックネームに変更します。

こんにちは、コミュニティへ
利用可能な場合、デフォルトのユーザ名slugをニックネームに変更することは可能ですか?

デフォルトでは、URLは次のようになります。 http://domain.tld/author/(admin )、
は、 http://domain.tld/author/(ニックネーム )に書き換えて変更することができるため、ユーザーがプロフィールページから自分のニックネームを変更すると、スラッグも変更されます。ユーザーが付けた新しい名前

どうもありがとう!
フィリップ

12
Philip

この問題を解決する方法は2つあります。作成者URLを構成するデータを変更するか、作成者URLを変更するかです。おそらくリダイレ​​クトも処理する必要があるので、ユーザーが自分のニックネームを変更しても、ユーザーアーカイブへの古いURLは機能し続けます。

作成者URLを変更する

この質問には2つの部分があります。著者スラッグの代わりに著者ニックネームを使用して着信リンクを処理し、標準スラッグの代わりにニックネームを使用して著者投稿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;
}

2番目の部分は、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 );
    }
}
16
Jan Fabry

このプラグインを使用してください: 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

1
Dominor Novus