WPサンプル カスタムポスト・カスタム分類 タブ切替(スタジオページ) 子ページあるか判定

スタジオページ

1.Custom Post Type UIでカスタムポスト『studios』を作成

投稿タイプスラッグ *:studios

複数形のラベル *:スタジオ

単数形のラベル *:スタジオ

アーカイブ:true 階層:true

2.カスタムポストUIでカスタム分類『studio_cat』を作成

タクソノミースラッグ *:studio_cat

複数形のラベル *:種類

単数形のラベル *:種類

利用する投稿タイプ *:スタジオ

階層:true ← チェックボックスで選択できるようになる

管理画面でカラムを表示:ture ← 記事一覧に分類が表示される

スタジオ-> 種類 先に種類カテゴリ設定する

3.Advanced Custom Fieldsカスタムフィールドで記事の入力項目を増やす

フィールドグループ:スタッフ入力項目 【設定】投稿タイプがスタッフと等しいページに設定

フィールドタイプ:テキスト

フィールドラベル:項目

フィールド名:job

手順:

【スタッフページ入力手順】<br>
1.タイトル:名前(日本語表記)例:山田 太郎<br>
2.タイトル下ブロック:メッセージ <br>
3.職種:例:EDITOR<br>
4.URL スラッグ:名前(英語表記 名前と苗字をハイフンで繋ぐ)例:taro-yamada<br>
5.チーム:該当項目チェック<br>
6.アイキャッチ画像:画像UP 』

プレースホルダーテキスト:EDITOR

先頭に追加:職種

//取得する時
<p><?php the_field('job'); ?></p>

4.固定ページでSTUDIOページを作成

タイトル:STUDIO

パーマリンク URL スラッグ:studio

5.スタジオ専用のページテンプレートを作成(page-studio.php

※カスタム投稿の子ページ有無で条件判定

カスタム投稿で子ページ無しの場合

page-studio.php

<?php if ( ! defined( 'ABSPATH' ) ) exit; ?>
<?php get_header(); ?>

<?php
//---------------------------
// タブ
//---------------------------
?>
<ul class="tab-group">
  <li class="tab is-active">Post Production</li>
  <li class="tab">Recording Studio</li>
</ul>

<?php
//---------------------------
// タブを切り替えて表示するコンテンツ
//---------------------------
?>
<div class="panel-group">

  <?php 
  //---------------------------
  // 各panel
  //---------------------------

  $studio_kinds = ['post-production','recording'];

  foreach( $studio_kinds as $studio_kind):


    if( $studio_kind === reset( $studio_kinds)){
      // 最初のpanelにis-showクラス
      echo '<div class="panel is-show">';

    }else{

      echo '<div class="panel">';
    }

    ?>

    <table class="studio">

      <?php
      // WP_Query 設定
       $args = array(
        'post_type' => 'studios', //←変更(カスタムポスト)
        'orderby' => 'date', 
        'order' => 'ASC', //←逆はDESC
        'post_parent' => 0, // 親のみ
        'tax_query' => array(
          array(
            'taxonomy' => 'studio_cat',//←変更(カスタム分類)
            'field'    => 'slug',
            'terms'    => $studio_kind,//←変更(ターム)
          ),
        ),
       );

       $the_query = new WP_Query( $args );
       if ( $the_query->have_posts() ) :
       ?>

       <?php 
         while ( $the_query->have_posts() ) : $the_query->the_post();
       //-------- ここから繰り返し---------- 

        get_template_part('template-parts/loop', 'studio');

       //-------- 繰り返しここまで-----------
       endwhile; ?>

       <?php //-------- WP_query終了-----------
       wp_reset_postdata();      
       endif; ?>

    </table>  

  </div><!--panel-->

  <?php endforeach; ?>

</div><!--panel-group-->


<?php get_footer(); ?>

template-parts/loop-studio.php

<?php 
$has_child = array(
  'child_of' => $post->ID,//←子ページ指定
  'post_type' => 'studios',
  'tax_query' => array(
    array(
      'taxonomy' => 'studio_cat',//←変更(カスタム分類)
      'field'    => 'slug',
      'terms'    => $studio_kind,//←変更(ターム)
    ),
 ),
);

// 子ページの取得
$child_pages = get_pages($has_child);

if( $child_pages )://もし子ページがあったら
?>
  <tr>
    <td>子ページ有り:<?php the_title(); ?></td>
    <td>
      
    <?php //子ページのリスト
    foreach( $child_pages as $child_page): ?>
      <a href="<?= $child_page->guid ?>"><?= $child_page->post_title ?></a>
    <?php endforeach; ?>
    </td>
  </tr>

<?php else: ?>

  <tr>
    <td colspan="2">子ページ無し:<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></td>
  </tr>

<?php endif; ?>