teratail header banner
teratail header banner
質問するログイン新規登録
WordPress

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

Q&A

1回答

535閲覧

Wordpressループについての質問です、タブを3つに分けてそれぞれに記事を表示したいです。

onaoki

総合スコア13

WordPress

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

0グッド

0クリップ

投稿2019/05/15 08:04

編集2019/05/16 02:56

0

0

Wordpressのループについての質問です。
年度別タブを3つ分け、2020 2019 2018で年が変わったら2021 2020 2019のように年度が送られる機能と、
それぞれに3月を区切りに年度別の記事が表示される機能を考えております。

その際ループにどう記載しようか調べてもなかなか出てきません。

当方初心者ですがご教示いただければと思います。
宜しくお願い致します。

追記:

質問初心者なもので失礼しました。
タブの動作部分はできてます。
下記をCSSで動作するようにしています。

<input type="radio" name="tab_btn"> <input id="tab2" type="radio" name="tab_btn" checked> <input id="tab3" type="radio" name="tab_btn"> <div class="tab_area"> <label class="tab1_label" style="background:#E86E4E;" for="tab1">2019年度</label> <label class="tab2_label" style="background-color:#156375;" for="tab2">2018年度</label> <label class="tab3_label" style="background-color:#42833B;" for="tab3">2017年度</label> </div> <div class="panel_area"> <div id="panel1" class="tab_panel"> </div> <div id="panel2" class="tab_panel"> </div> <div id="panel3" class="tab_panel"> </div> </div>

自分で調べてた分で下記使えそうなモノが有りこれを参考になんとかできそうみたいな感じで考えてます。

function custom__pre_get_posts( $query ) { if ( is_admin() || ! $query->is_main_query() ) { return $query; } if ( is_year() ) { $y = get_query_var( 'year' ); $date_from = $y . '-04-01'; $date_to = ( $y + 1 ) . '-03-31 23:59:59'; $query->set( 'date_query', array( 'compare' => 'BETWEEN', 'after' => $date_from, 'before' => $date_to, 'inclusive' => true, ) ); $query->set( 'year', null ); //元々あった年指定を削除 } return $query; } add_action( 'pre_get_posts', 'custom__pre_get_posts' );

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

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

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

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

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

CHERRY

2019/05/15 09:03 編集

現在の内容では、丸投げと判断されそうな質問の内容です。 ベースとなる ・WordPress のデータなしで、年度をタブで表示して切り替えること ・年度でアーカイブを表示すること はできているのでしょうか? まずは、その部分のコードを質問に追記していただけないでしょうか?
CHERRY

2019/05/15 11:43

ソースコードは、コード部分を選択してツールバーの <code> ボタンを利用して、見やすく記述していただけないでしょうか。  [ソースコードを書きましょう]( https://teratail.com/help/question-tips#questionTips3-5-1 )参考
onaoki

2019/05/16 00:29

了解です、失礼致しました。
guest

回答1

0

なるほど...

まず、is_year() は、年アーカイブのチェック関数なので、http://example.com/2019/ のような 数字4桁の年付きの URL でアクセスされた場合のみ有効です。
年アーカイブ以外のときは、false になります。

関数リファレンス/is_year

また、日付アーカイブ以外の URL にアクセスした場合には、年の値がないので、get_query_var( 'year' ); は、null になります。

pre_get_posts を考えられているようですが、メインクエリーは1回しか実行されませんので、タブに分けた複数年を取得するにはちょっと向かないと思います。


タブ部分ができているのであれば、年度を取得して計算する方法をちょっと考える必要がありますが、WP_Query でサブループを年度別に分けて、3回つかう方法が簡単ではないでしょうか?

出先なので、おおまかな概念だけになりますが...

<div class="panel_area"> <div id="panel1" class="tab_panel"> <?php $date_from1= 〜 ; $date_to1 = 〜 ; $args1 = array( 'post_type' => 'post', 'date_query', array( 'compare' => 'BETWEEN', 'after' => $date_from1, 'before' => $date_to1, 'inclusive' => true, ) ); $query1 = new WP_Query( $args1 ); if ( $query1->have_posts() ) { while ( $query1->have_posts() ) { $query1->the_post(); echo '<li>' . get_the_title() . '</li>'; } wp_reset_postdata(); } ?> </div> <div id="panel2" class="tab_panel"> <?php $date_from2= 〜 ; $date_to2 = 〜 ; $args2 = array( 'post_type' => 'post', 'date_query', array( 'compare' => 'BETWEEN', 'after' => $date_from2, 'before' => $date_to2, 'inclusive' => true, ) ); $query2 = new WP_Query( $args2 ); if ( $query2->have_posts() ) { while ( $query2->have_posts() ) { $query2->the_post(); echo '<li>' . get_the_title() . '</li>'; } wp_reset_postdata(); } ?> </div> <div id="panel3" class="tab_panel"> <?php $date_from3= 〜 ; $date_to3 = 〜 ; $args3 = array( 'post_type' => 'post', 'date_query', array( 'compare' => 'BETWEEN', 'after' => $date_from3, 'before' => $date_to3, 'inclusive' => true, ) ); $query3 = new WP_Query( $args3 ); if ( $query3->have_posts() ) { while ( $query3->have_posts() ) { $query3->the_post(); echo '<li>' . get_the_title() . '</li>'; } wp_reset_postdata(); } ?> </div>

の用な感じでどうでしょうか?

投稿2019/05/15 12:07

編集2019/05/15 12:09
CHERRY

総合スコア25234

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

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

onaoki

2019/05/16 00:31

ご丁寧にありがとうございます。 記載して頂いた方法で年度取得部分を少々考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問