WordPressでは、会員のみ公開したいページを「非公開」というステータスで制作することができます。
ただし、非公開のページはタイトルに自動的に「非公開:」というラベルが付加されてしまい、これは設定などでは外すことができないようです。
そこで、プログラムを使ってこれを取り除く方法を紹介しましょう。
functions.phpで制御しよう
お使いのテーマフォルダの中を確認しましょう。
wp-content/themes/(テーマ名)
ここに、「functions.php」というファイルがあります。もしなければ、この名前で新しいファイルを作成しましょう。
そしたら、ファイルの最後に次のように追記します。
add_filter('the_title', function ($title = '') {
$search[0] = '/^' . str_replace('%s', '(.*)', preg_quote(__('Protected: %s'), '/')) . '$/';
$search[1] = '/^' . str_replace('%s', '(.*)', preg_quote(__('Private: %s'), '/')) . '$/';
return preg_replace($search, '$1', $title);
});
これでサイトを表示すると、タイトルが変化して表示されなくなります。
プログラム内容を確認しよう
それでは、書いたプログラムの内容を確認しましょう。ここでは、「正規表現」という方法を使って書き換えています。WordPressでは非公開ページを表示するときに、タイトルに「非公開:」という文言が付加された状態で生成されます。
そこで、これを「フィルターフック」というしくみを使って取り除いてから、タイトルとして生成するように変更します。ここでは「add_filter」で「the_title」というフィルターを書き換えましょう。
実際にタイトルを書き換えるのは、以下の部分です。
$search[0] = '/^' . str_replace('%s', '(.*)', preg_quote(__('Private: %s'), '/')) . '$/';
ただ、このプログラムは実はある理由から少し複雑になっています。もし、日本語専用のWebサイトの場合、このプログラムは次のように書き換えられます。
$title = str_replace('非公開:', '', $title);
これでも正しく動作します。しかし、WordPressは多言語対応がされている為、このままでは英語版のサイトなどにしたときに、正しく書き換えられません。そこで、本来の英文である「Private:」というラベルを多言語対応した状態で書き換える必要があります。それが「__()」というファンクションです。
これに沿って開発しようとすると、やらなければならない処理がどんどん増えて、正規表現のエスケープ処理である「preg_quote」を行ったり、「%s」の記述をこちらも正規表現の記述である「(.*)」に置き換えるなど、各種正規表現の為の対処をしています。このあたりは、詳しい解説は省略するので、興味があれば正規表現を学んでみてください。
ひとまず、こちらの方法で対応できます。functions.phpが書き換えられないとか書き換えるのが怖いという場合のために、プラグイン形式でアップロード可能なファイルも配置いたします。プラグインのアップロードからご利用ください。