ワードプレス:子テーマで特定のカテゴリーの投稿を分岐してcontent.phpや★★★-content.phpを読み込む

おぼえがき

・子テーマ内でカスタマイズ
・function.phpへの書き込みは行わない
・if分を使った簡単プログラムでカテゴリー所属の条件で分岐を行う
・末端の投稿ページのカスタマイズが行いたい(私はカスタムフィールドを表示させたい為)

お願い:下手くそ無知プログラムなので文句はなしです。

CocoonChildの子テーマにてカスタマイズを行う

親テーマを直接あれこれしても、バージョンアップや修正が親テーマにて行われてしまうので修正やPHPを変更しても上書きされて水の泡になるので子テーマをインストールしてカスタマイズを行います。(子テーマのインストールについてはこの記事では書いていません)

親テーマから構造を探る

親テーマの位置とフォルダ

/wp-content/themes/cocoon-master/

投稿ページのつくりを見てみる

/wp-content/themes/cocoon-master/wp-content/themes/cocoon-master/single.php

よく耳にする single.php の中身を見てみます。

<?php //通常ページとAMPページの切り分け
/**
 * Cocoon WordPress Theme
 * @author: yhira
 * @link: https://wp-cocoon.com/
 * @license: http://www.gnu.org/licenses/gpl-2.0.html GPL v2 or later
 */
if ( !defined( 'ABSPATH' ) ) exit;

if (!is_amp()) {
   get_header();
 } else {
   cocoon_template_part('tmp/amp-header');
 }
?>

<?php //投稿ページ内容
cocoon_template_part('tmp/single-contents'); ?>
<?php get_footer(); ?>

tmp/single-contents
となっていますのでファイルをたどります。

/wp-content/themes/cocoon-master/tmp/single-contents.php
のファイルに辿り着きます。

続けて中身を見てみます。
/wp-content/themes/cocoon-master/tmp/single-contents.php

<?php
/**
 * Cocoon WordPress Theme
 * @author: yhira
 * @link: https://wp-cocoon.com/
 * @license: http://www.gnu.org/licenses/gpl-2.0.html GPL v2 or later
 */
if ( !defined( 'ABSPATH' ) ) exit;

///////////////////////////////////////
// 投稿ページのコンテンツ
///////////////////////////////////////?>
<?php //パンくずリストがメイントップの場合
if (is_single_breadcrumbs_position_main_top()){
  cocoon_template_part('tmp/breadcrumbs');
} ?>

<?php //本文テンプレート
cocoon_template_part('tmp/content') ?>


<div class="under-entry-content">
〜〜 以下略 〜〜

/wp-content/themes/cocoon-master/tmp/contents.php
のファイルに辿り着きます。

また、中身をのぞいてみます。
/wp-content/themes/cocoon-master/tmp/contents.php

<?php //投稿・固定ページ本文
/**
 * Cocoon WordPress Theme
 * @author: yhira
 * @link: https://wp-cocoon.com/
 * @license: http://www.gnu.org/licenses/gpl-2.0.html GPL v2 or later
 */
if ( !defined( 'ABSPATH' ) ) exit; ?>
〜〜 以下略 〜〜

/wp-content/themes/cocoon-master/tmp/contents.php
このファイルが投稿ページの本体を作っている様ですね。
冒頭に投稿・固定ページ本文と親切に書いてあります。

必要なフォルダやファイルがわかった

・カスタマイズ元になる親フォルダ
/wp-content/themes/cocoon-master
・投稿のカスタマイズをするのに必要なフォルダ
/wp-content/themes/cocoon-master/tmp/
・投稿記事を呼び出しているファイル
/wp-content/themes/cocoon-master/tmp/single-contents.php
・投稿記事を構成しているファイル(タイトルや本文)
/wp-content/themes/cocoon-master/tmp/contents.php
そのほか、116行目〜本文の前と後にアクションフックがあるのでこれも使えそうですね

略〜〜
115行目から 
     <?php //投稿・固定ページ本文前のアクションフック
      do_action('singular_entry_content_before'); ?>

      <div class="entry-content cf<?php echo get_additional_entry_content_classes(); ?>" itemprop="mainEntityOfPage">
      <?php //記事本文の表示
        the_content(); ?>
      </div>

      <?php ////投稿・固定ページ本文後のアクションフック
      do_action('singular_entry_content_after'); ?>
〜〜 以下略 〜〜

必要なファイルを集める

子テーマのフォルダの中に親テーマと同じ階層を再現する

/wp-content/themes/cocoon-child-master
/wp-content/themes/cocoon-child-master/tmp/
/wp-content/themes/cocoon-child-master/tmp/single-contents.php
/wp-content/themes/cocoon-child-master/tmp/contents.php

・下記のフォルダ(ディレクトリ)を作成
/wp-content/themes/cocoon-child-master/tmp/
・フォルダの中にファイルをカスタマイズ元になる親テーマフォルダからコピー
(親テーマフォルダ)/wp-content/themes/cocoon-master

テストしてみる

略〜〜 116行目あたり 〜〜
      <?php //投稿・固定ページ本文前のアクションフック
      do_action('singular_entry_content_before'); ?>

      <div class="entry-content cf<?php echo get_additional_entry_content_classes(); ?>" itemprop="mainEntityOfPage">
      <?php //記事本文の表示
        the_content(); ?>
<!----- 子テーマのフォルダから読めるかな? ----->
        <div>子テーマのcontent.phpです。</div>
      </div>

      <?php ////投稿・固定ページ本文後のアクションフック
      do_action('singular_entry_content_after'); ?>

テストの文面を書き込んでアップロード

読み込んでいますね。いい感じです。

分岐先のファイルを作成

content.php を複製して名前を変更

content.php => custom-content.php としました。

カテゴリーで分岐させてみる

カテゴリーの状態

コンテンツ内容の一つ上のファイル

content.php を読み込んでいる「single-content.php」 に分岐を書いてみます。

(カテゴリー7もしくはスラッグ名)とそれ以外で分岐を行う

IDで指定するパターン

カテゴリー7に属する場合は>> custom-content.php へ

それ以外は、通常のcontent.php へ


<?php if( in_category('7') ) : ?>
  <div>カテゴリー7に属する記事を表示</div>
<?php
cocoon_template_part('tmp/custom-content') ?>
<?php else: ?>
  <div>カテゴリ−7以外の記事はこちらで表示</div>
<?php
cocoon_template_part('tmp/content') ?>
<?php endif; ?>

スラッグ名で指定するパターン

bunki に属する場合は>> custom-content.php へ

それ以外は、通常のcontent.php へ

<?php if( in_category('bunki') ) : ?>
<?php
cocoon_template_part('tmp/custom-content') ?>
<?php else: ?>
<?php
cocoon_template_part('tmp/content') ?>
<?php endif; ?>

本文テンプレート

<?php //本文テンプレート
//cocoon_template_part('tmp/content') ?>

の通り「cocoon_template_part」とそのまま書いてみるとうまく動作しました。

ファイル:custom-content.php の中にカスタムフィールドの呼び出しなどを書けば指定したカテゴリーの所属していれば表示されますね。
ちなみに 複数のカテゴリを指定する場合は
<?php if( is_category( array(‘カテゴリーID’, ‘カテゴリーID’) ) ) : ?>
として配列(array)にするようです。

色々と不親切な記事ですみませんが

今日もとりあえず、まっいっかぁ!で

美味しいビールが飲めるかな!

コメント

タイトルとURLをコピーしました