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

タイトルの通り、ユーザーページのパーマリンクやタイトルを変更する際の手順です。
登録にはWordPressプラグインのWP-Membersを利用します。

今回の目標と条件

ユーザーページの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)のところに数値が入っていれば成功です。

ユーザーページ(author.php)のパーマリンクを変更

これはプラグインを使えばサクッと出来ます。
Edit Author Slug

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(); ?>