🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4921閲覧

wordpress タームごとにタブ切り替えをしたい

takayuu

総合スコア5

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/10/07 04:49

編集2019/10/07 04:59

カスタム投稿を使用してランキングを作成しており、カテゴリーごとにタブ切り替えをしたいです。
タブメニュー、タブコンテンツの外枠はタームごとに出しわけができたのですが、投稿内容がタームごとに出力できません。

また、投稿内容(ランキングデータ)は「Advanced Custom Fields」の「関連」を使用して出力する予定です。

コード自体はindex.phpを想定しており、
今年の当月のランキングのみを出力させる予定です。

カスタム投稿タイプ:ranking
カスタムタクソノミー:ranking_cat

php

1<?php 2    $this_date = date('Y-m-1'); // 今日の日付を元に今月の月初めを取得 3    $this_year = date('Y', strtotime($this_date)); // 年を取得 4    $this_month = date('m', strtotime($this_date)); // 月を取得 5    $terms = get_terms('ranking_cat'); 6    $args = array( 7        'year' => $this_year, 8        'monthnum' => $this_month, 9        'post_type' => 'ranking', 10        'posts_per_page' => 1, // ループ表示させる数を指定 11        ); 12        $the_query = new WP_Query($args); 13?> 14 15    <!-- タブメニュー --> 16    <ul class="nav nav-tabs mt-5"> 17      <?php foreach ( $terms as $term ) { 18        if ($term === reset($terms)) {// 1番目は初めから表示 19          echo '<li class="nav-item"><a class="nav-link active" href="#tab-'.$term->term_id.'" data-toggle="tab">'.$term->name.'</a></li>'; 20          } else { 21            echo '<li class="nav-item"><a class="nav-link" href="#tab-'.$term->term_id.'" data-toggle="tab">'.$term->name.'</a></li>'; 22        } 23      } ?> 24    </ul> 25 26 <!-- タブコンテンツ --> 27   <?php if ( $the_query->have_posts() ) : ?> 28      <div class="tab-content"> 29        <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 30          <?php 31             $posts = get_field('ranking-posts'); // ランキングデータを取得 32          ?> 33          <?php foreach ( $terms as $term ): ?> 34            <?php if ($term === reset($terms)) { ?> 35  <!-- タブリスト --> 36  <?php echo '<div class="tab-pane active" id="tab-'.$term->term_id.'">'; // 1番目は初めから表示 ?> 37 38             <!-- 39               ここにタームごとのランキングデータを出力したい。 40               下記は出力予定です。 41              --> 42 43             <?php 44              /*foreach ( $posts as $val ) { 45              $link = get_permalink( $val->ID ); 46              $title = get_the_title( $val->ID ); 47              $img = get_the_post_thumbnail( $val->ID , 'medium' ); 48              $name = the_field('profile-name-en', $val->ID); 49              $category = the_terms( $val->ID, 'shop_cat' ); 50              }*/ 51             ?> 52 53            <?php echo '</div>'; ?> 54 55 <?php } else { ?> 56 <?php echo '<div class="tab-pane" id="tab-'.$term->term_id.'">'; ?> 57 58 <!-- 59               ここにタームごとのランキングデータを出力したい。 60               下記は出力予定です。 61              --> 62 63             <?php 64              /*foreach ( $posts as $val ) { 65              $link = get_permalink( $val->ID ); 66              $title = get_the_title( $val->ID ); 67              $img = get_the_post_thumbnail( $val->ID , 'medium' ); 68              $name = the_field('profile-name-en', $val->ID); 69              $category = the_terms( $val->ID, 'shop_cat' ); 70              }*/ 71             ?> 72 73 <?php echo '</div>'; ?> 74 <?php } ?> 75 <?php endforeach; ?> 76 <?php endwhile; ?> 77</div> 78 79 80<?php wp_reset_postdata(); ?>

以上になります。
皆様のお力添えお願い致しますm(__)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ターム事にWP_Queryの値を設定してあげることで表示することができました。
お騒がせしましたm(__)m

下記解決コードになります。
もし同じ悩みの方がいたらお役立てください。

php

1<?php 2 $this_date = date('Y-m-1'); // 今日の日付を元に今月の月初めを取得 3 $this_year = date('Y', strtotime($this_date)); // 年を取得 4 $this_month = date('m', strtotime($this_date)); // 月を取得 5 $terms = get_terms('ranking_cat'); 6 ?> 7 8 <ul class="nav nav-tabs mt-5"> 9 <?php foreach ( $terms as $term ) { 10 if ($term === reset($terms)) { 11 echo '<li class="nav-item"><a class="nav-link active" href="#tab-'.$term->term_id.'" data-toggle="tab">'.$term->name.'</a></li>'; 12 } else { 13 echo '<li class="nav-item"><a class="nav-link" href="#tab-'.$term->term_id.'" data-toggle="tab">'.$term->name.'</a></li>'; 14 } 15 } ?> 16 </ul> 17 18 <div class="tab-content"> 19 20 <?php } if ($term === reset($terms)) { //1番目の場合 ?> 21 22 <?php echo '<div class="tab-pane active" id="tab-'.$term->term_id.'">'; ?> 23 24 <?php 25 $taxonomy = 'ranking_cat'; 26 $args = array( 27 'year' => $this_year, 28 'monthnum' => $this_month, 29 'post_type' => 'ranking', 30 'tax_query' => array( 31 array( 32 'taxonomy' => $taxonomy, 33 'field' => 'term_id', 34 'terms' => $term->term_id, 35 ), 36 ), 37 ); 38 $the_query = new WP_Query( $args ); 39 ?> 40 41 <?php if ( $the_query->have_posts() ) : ?> 42 <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 43 <?php 44 $posts = get_field('ranking-posts'); 45 ?> 46 <?php foreach ( $posts as $val ) { 47 48 $title = get_the_title( $val->ID ); 49 50 echo '<div>'.$title.'</div>'; 51 52 } ?> 53 <?php endwhile; ?> 54 <?php wp_reset_postdata(); ?> 55 <?php endif; ?> 56 57 <?php echo '</div>'; ?> 58 59 <?php } else { ?> 60 61 <?php echo '<div class="tab-pane" id="tab-'.$term->term_id.'">'; ?> 62 63 <?php 64 $taxonomy = 'ranking_cat'; 65 $args = array( 66 'year' => $this_year, 67 'monthnum' => $this_month, 68 'post_type' => 'ranking', 69 'tax_query' => array( 70 array( 71 'taxonomy' => $taxonomy, 72 'field' => 'term_id', 73 'terms' => $term->term_id, 74 ), 75 ), 76 ); 77 $the_query = new WP_Query( $args ); 78 ?> 79 80 <?php if ( $the_query->have_posts() ) : ?> 81 <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 82 <?php 83 $posts = get_field('ranking-posts'); 84 ?> 85 <?php foreach ( $posts as $val ) { 86 $title = get_the_title( $val->ID ); 87 echo '<div>'.$title.'</div>'; 88 89 } ?> 90 <?php endwhile; ?> 91 <?php wp_reset_postdata(); ?> 92 <?php endif; ?> 93 94 <?php echo '</div>'; ?> 95 <?php } ?> 96 <?php endforeach; ?> 97 </div>

投稿2019/10/07 10:40

takayuu

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問