コミュニティの皆さん、こんにちは
、デフォルトのユーザー名スラッグをニックネームに変更することは可能ですか?
デフォルトでは、URLは次のようになります。http://domain.tld/author/(admin)、
書き換えてhttp://domain.tld/author/(nickname)に変更できるため、ユーザーがニックネームを変更した場合プロファイルページからスラッグは、ユーザーが指定した新しい名前にも変更されますか?
どうもありがとう!
フィリップ
コミュニティの皆さん、こんにちは
、デフォルトのユーザー名スラッグをニックネームに変更することは可能ですか?
デフォルトでは、URLは次のようになります。http://domain.tld/author/(admin)、
書き換えてhttp://domain.tld/author/(nickname)に変更できるため、ユーザーがニックネームを変更した場合プロファイルページからスラッグは、ユーザーが指定した新しい名前にも変更されますか?
どうもありがとう!
フィリップ
回答:
この問題を解決するには、著者のURLを形成するデータを変更するか、著者のURLを変更する2つの方法があります。おそらくリダイレクトも処理する必要があるため、ユーザーがニックネームを変更してもユーザーアーカイブへの古い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;
}
おそらくもっと簡単な方法は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 );
}
}
このプラグインを使用します: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
簡単な方法は、プラグイン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;
}