名前の由来の通りシンプルな外観で、かつ分かりやすい内部構造でありながら、投稿編集画面上で
- コンテンツごとにコメントを許可/凍結できる
- コンテンツごとに検索エンジン表示向けのタイトルや抜粋(メタディスクリプション)などを設定できる(SEO設定)
- コンテンツごとに広告の表示/非表示が設定できる
- 簡単な記事の修正時に「更新日」が書き換わらないようにできる
など「これやれたらなぁ」と思う機能が満載のWordPressテーマ【Simplicity2】。無料でここまで考えてあるテーマはなかなかないと思います(私はすっかりSimplicity2マニアです)。
これらの便利機能はWordPress標準の投稿タイプである「投稿」と「固定ページ」ではすぐに使えるようになっていますが、カスタム投稿タイプの場合は表示されません(当然動作もしません)。
いろいろなプラグインだのテーマだのを使ったことのある方なら分かると思いますが、そうでない方は「カスタム投稿タイプで使えないならダメじゃん」なんて思ってしまうかもしれませんね。
少し脱線しますが、どうしてカスタム投稿タイプには適用されてないの?についてちょっとだけ説明すると、カスタム投稿タイプというのは文字通りカスタム機能でWordPressでサイトを作る人が任意に設定できる機能、そしてカスタム投稿の名前も任意に付けることができる機能なので、プラグインやテーマの開発者が想像することができません。従って不特定なものをソースに加えて不具合が出ないように、投稿のタイプはWordPress標準の「投稿」と「固定ページ」に限定されているのです。
でも、不特定なものをソースに加えて不具合が出ないようにしてあるだけですから、ちょっとカスタマイズすることでカスタム投稿タイプでも同様の機能が使えるようになります。
今回はSimplicity2で記事を書くときに設定できる便利な機能の【コメントの許可/凍結】【SEO設定】【広告設定】【更新タイプ】を自身で追加したカスタム投稿タイプでも使用できるようにする方法を紹介します。
【Simplicity2】の投稿にある機能をカスタム投稿タイプでも使えるようにする方法
これらの機能はWordPressの便利機能である「カスタムフィールド」を使用しています。それぞれのコンテンツのカスタムフィールドに値がある/ない、設定がある/ないによって投稿機能が働きます。つまり、使いたい機能のカスタムフィールドを追加してやればいいということになります。
では早速カスタマイズしていきましょう。
複数のカスタム投稿タイプを使っている場合には全部一緒にやっちゃおう!と考えがちですが、焦る気持ちを押さえてまず1つだけ設定して実際に動作するかを確認してください(複数設定の方法は文末の「おまけ」で紹介しています)。
【Simplicity2】テーマが作るカスタムフィールドの定義は、親テーマの中の「custom-field.php」にありますのでテーマの編集で開きます。
開いてすぐ見える場所(ソースの上のほう)に
//コメントボックス
add_meta_box( 'comment_setting_in_page','コメントの設定', 'view_comment_custom_box', 'post', 'side' );
//広告ボックス
add_meta_box( 'ad_setting_in_page','広告の設定', 'view_ad_custom_box', 'post', 'side' );
add_meta_box( 'ad_setting_in_page','広告の設定', 'view_ad_custom_box', 'page', 'side' );
add_meta_box( 'ad_setting_in_page','広告の設定', 'view_ad_custom_box', 'topic', 'side' );
//SEOボックス
add_meta_box( 'seo_setting_in_page','SEO設定', 'view_seo_custom_box', 'post', 'normal', 'high' );
add_meta_box( 'seo_setting_in_page','SEO設定', 'view_seo_custom_box', 'page', 'normal', 'high' );
add_meta_box( 'seo_setting_in_page','SEO設定', 'view_seo_custom_box', 'topic', 'normal', 'high' );
//ページ設定
add_meta_box( 'page_setting_in_page','ページ設定', 'view_page_custom_box', 'post', 'side' );
add_meta_box( 'page_setting_in_page','ページ設定', 'view_page_custom_box', 'page', 'side' );
add_meta_box( 'page_setting_in_page','ページ設定', 'view_page_custom_box', 'topic', 'side' );
if (is_amp_enable()) {
//AMP設定
add_meta_box( 'amp_setting_in_page','AMP設定', 'view_amp_custom_box', 'post', 'side' );
}
//更新タイプ
add_meta_box( 'update_type_setting_in_page', '更新日の変更', 'view_update_type_custom_box', 'post', 'side' );
add_meta_box( 'update_type_setting_in_page', '更新日の変更', 'view_update_type_custom_box', 'page', 'side' );
//add_meta_box( 'update_type_setting_in_page', '更新日の変更', 'view_update_type_custom_box', 'custom_post_type', 'side' );
というのがありますね。これを必要に応じて1つ1つカスタマイズしていきます。
例えばコメントボックスであれば、
add_meta_box( 'comment_setting_in_page','コメントの設定', 'view_comment_custom_box', 'post', 'side' );
という行をすぐ下にコピペします。そして
add_meta_box( 'comment_setting_in_page','コメントの設定', 'view_comment_custom_box', 'カスタム投稿タイプのスラグ', 'side' );
という風に「カスタム投稿スラグ」となっている場所へ実際のサイトにあるカスタム投稿タイプのスラグを入力して保存します。
設定はたったこれだけです。簡単ですね。
その他のカスタマイズも同様に「SEOボックス」なら
add_meta_box( 'seo_setting_in_page','SEO設定', 'view_seo_custom_box', 'post', 'normal', 'high' );
をコピペして、「’post’」となっているところをカスタム投稿タイプのスラグ名にしていくだけです。
※このファイルは親テーマのサブディレクトリに入っているプログラムなので、子テーマを使っている場合でも親テーマ側で設定する必要があります(子テーマにコピーしてのテストはしていませんのでひょっとしたら動作するかもしれません)
※変更したら実際の投稿編集画面に表示されるか?そこに入力したり設定したものがきちんとソース上で反映されるか?を必ずチェックしてくださいね。
※一応後から「この項目あったはずなのに・・・」とならないように、すべての項目を追加しておくことをおすすめします。
※万が一編集に失敗したときのために、FTPなどで「custom-field.php」をパソコンへ保存してバックアップしておくことをおすすめします。
以上、分かってしまえば簡単すぎるカスタマイズでちょっと拍子抜け感がありますが、私と同じように【Simplicity2】の投稿にある機能をカスタム投稿タイプでも使えるようにしたかった方の参考になれば幸いです。
余談ですが、「’post'(投稿)」「’page'(固定ページ)」となっている行のほかに「’topic’」となっている行があるのを不思議に思いませんでした?「’topic’」はWordPressの掲示板プラグインである【bbpress】を使ったときに作られるカスタム投稿タイプのスラグです。bbpressを有効化したらすぐに使えるように予め設定されているんですね。
おまけ 複数の投稿タイプがある場合の便利な構文
たくさんのカスタム投稿タイプを使っている場合には前述したように1行1行追加しているととんでもない数になってしまいますよね?これを防ぐために魔法のコードを使います(別に魔法でもないような・・・)。
コメントボックスを例に挙げると前項の方法では
add_meta_box( 'comment_setting_in_page','コメントの設定', 'view_comment_custom_box', '投稿タイプ', 'side' );
の「’投稿タイプ’」となっている場所にカスタム投稿スラグを入れるよう紹介しています。これをちょっとカスタマイズします。
add_meta_box( 'comment_setting_in_page','コメントの設定', 'view_comment_custom_box', array('投稿タイプ','カスタム投稿タイプ2'), 'side' );
違い分かりますか?「投稿タイプ」となっているところが変わってますね。
array(‘投稿タイプ’,’カスタム投稿タイプ2’)という形になっています。これは「”,」で連続しているものをすべて含めてね!という魔法?のコードです。これでどれだけカスタム投稿タイプがあっても1行で済みますね。
それなら元々ある「’post’」の行に書き足せば?と思うかもしれませんね。そう考えた方は正解です!!それでも動作はします。ただオリジナルなものは残しておいて、カスタマイズした部分は追記しておいた方が後で何かソースを確認する作業があったときに「同じソースがない!!」と悩むことを防ぐ意味合いがあるんです。まあ「私は大丈夫!!」という方はそのまま追加してもいいと思いますけどね。
どうですか?今回の設定でfunctions.phpへ追記したものや、プラグインのいくつかを削減することができそうです。
私は基本的にコメントはウェルカムなので凍結することはないですし、広告設定を変更することもほとんどありませんが、【SEO設定】と【更新タイプ】についてはプラグインとコード追加でやっていましたのでこれで削減できます(記事のメンテナンスが大変かな?)。特に
【SEO設定】のSEOタイトルはぜひ設定していきたい項目なのでがんばって設定したいと思います。
【SEO設定】の概要については本家Simplicity2のサイトの「Simplicityの投稿・固定ページにある「SEO設定」の設定方法」で詳しく書かれています。