WordPressでユーザーページのパーマリンクやタイトル変更のまとめ

タイトルの通り、ユーザーページのパーマリンクやタイトルを変更する際の手順です。
登録にはWordPressプラグインのWP-Membersを利用します。
Contents
今回の目標と条件
ユーザーページのURLはデフォルトでは、以下のようになります。
ドメイン/author/ユーザー名
これを
ドメイン/member/数字
のように変更してみたいと思います。
また、タイトルの表示もユーザー名からニックネームに変更します。
また、条件として、
・登録フォームの項目は、ユーザー名(半角英数字)とニックネーム(日本語)、メール、パスワードのみ。
・ドメインにしたい数字は当然、ユーザーには入力させない。
とします。
登録フォームの処理
まずはWP-Membersを使って登録フォームの処理です。
WP-Membersの設定
今回は、利用しないデフォルトのユーザーフィールド「first_name」を利用します。
管理画面のWP-Members > フィールドでfirst_nameを「表示」にします。必須項目にしてはいけません。
first_nameを既に利用している場合は、新しくフィールドを作るなりしてください。
functions.phpに以下コードを追加
これは、WP-Membersで登録フォームにplaceholderを実装する方法の応用編です。
add_filter( 'wpmem_register_form_rows', 'my_register_form_rows_filter', 10, 2 ); function my_register_form_rows_filter( $rows, $toggle ) { $rows['first_name'][label] = '<label style="display:none;"></label>'; $rows['first_name'][field_before] = '<div style="display:none;">'; $str = mt_rand(1000000000,9999999999); $rows['first_name'][field] = '<input name="first_name" type="text" id="first_name" value="'.$str.'" class="textbox" />'; return $rows; }
上記では登録フォームに、
・first_nameのvalueに値を与える処理
・first_nameのラベルとフォームを隠す処理
をしています。
wpmem_register_dataを使えば楽なんですが、何度やってもうまくいかなかったので、力技的な感じになっています。
使わないデフォルトのユーザーフィールド(今回はfirst_name)を利用して、first_nameのvalueに10桁のランダムな数字を挿入します。
今回は、「1000000000から9999999999の間の数字のどれか」を指定していますが、これでも被りそうだなという時は桁数を増やすなり、独自の乱数を付け加えるなりすればいいと思います。
個人的に考えたのは、UNIXTIMEに1000のランダムな数値をくっつけるというやつ
<?php $str = time(); $str2 = mt_rand(100,999); echo $str.$str2 ?>
同じ「瞬間」に登録することが奇跡に近いですが、さらに900分の1にするというものですが、単純に桁数を増やすのと確率的には変わらないんですかね。その辺りさっぱりわかりません。
ユーザー数は増えていく(希望)ので、こっちの方が有利なような気もしますが。まぁ、お好みで・・
以上で登録フォームの処理は終了です。
ダミーでフロント画面からユーザー登録してみて、管理画面のユーザーの名(first_name)のところに数値が入っていれば成功です。
これはプラグインを使えばサクッと出来ます。
Edit Author Slug
1.Author Baseの欄に今回の目標であるmenberを入力。
2.自動更新にチェック
3.Author Slug Structureを「firstname」に変更
4.すでにユーザーがいる場合は、Bulk Updateにチェックをして、「firstname」に変更してやります。
これで、ユーザーページが
ドメイン/member/数字
というURLになりました。確認してみてください。
ユーザーページのタイトルをニックネームに変更
header.phpで普通に
wp_title('');
にすると、ユーザー名が表示されてしまいますので、以下のように変更します。
<?php if(is_author()): global $wp_query; $curauth = $wp_query->get_queried_object(); echo $curauth->nickname.'さんの投稿 - '; bloginfo('name'); elseif; ?>
$curauthは変更不可です。
これはループ外でも使えますので、H1タイトル等にも使いまわせます。
ユーザー情報のリンクや表示など
ニックネームの表示
<?php echo get_the_author_meta( 'nickname' ) ?>
ユーザーページへのリンク
<?php echo home_url(); ?>/member/<?php echo get_the_author_meta( 'first_name' ) ?>
この例は、authorをmemberに、ユーザー名をfirst_nameに変更した場合のものです。
投稿内で利用します。
ループ外で使う場合はユーザーIDを指定する必要があります。
ユーザーページでの投稿一覧表示
<?php $args = array( 'author'=>( $author ), 'posts_per_page' => -1, 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'post', 'post_status' => 'publish' ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); ?> ・・・ <?php }} wp_reset_postdata(); ?>