質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

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

PHP

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

Q&A

1回答

1979閲覧

WordPressの記事の表示順を任意の順番に変更したい

vanilla_dev

総合スコア0

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/06/22 04:45

編集2021/06/23 06:13

前提・実現したいこと

WordPressの個別ページ内で記事の表示順を変更したいのですが、苦戦しております。
具体的には、
「JOBS」という個別ページ内で「募集中」or「終了」のどちらかのタグを持つ記事を、以下のような記事の表示順に変えたいと思っております。
1.「募集中」のタグを持つ記事を投稿日順で出力
2.「終了」のタグを持つ記事を投稿日順で出力

「募集中」のタグを持つ記事が先頭に来て、後半に、「終了」のタグを持つ記事が出力されるイメージです。
以下に記載しました方法で試してみましたが、うまくいかず、でした。

仕様的にはページ下部にページネーションもおく仕様になっております。

6/23追記
説明だけでは伝わりにくいと思い、画像を添付いたします。
実現したいこととしてはしたの図の通りです。
イメージ説明

Wordpressプラグインの「Intuitive Custom Post Order」での並び替えで実現できるのはできるのですが、記事数が多くなると、かなり面倒だと思い、あまり現実的な方法だとは言えないのかなといった印象です。

試したこと

https://macoblog.com/order_by_category/
こちらの記事を参考に、タグに優先度をつければいけるかと思いましたが、現在のコードに合わせる書き方がわからず、断念しました。

Advanced Custom fieldのプラグインを使用し、
添付画像のように、募集中or終了を選択するチェックボックス式のフィールドを用意しました。
https://gyazo.com/24699c59d423605c624a3ad3ff6d4fb1
「募集中」のタグをもつ記事だったら募集中に、「終了」のタグをもつ記事だったら終了に、チェックを入れるような仕様にしました。
カスタムフィールドでの並び替えも試しましたが、私の調べた限りでは達成することができませんでした。

個別ページ内でサブループを2回回して、
一回目を「募集中」をもつ記事を出力、
その下で「終了」をもつ記事を出力
といった感じで実装すると、順番的には、達成できるのですが、ページネーションが機能しなくなります。
ちなみにページネーションは固定ページ内で以下のように出力しています。

php

1<?php pagination($the_query->max_num_pages);?>

参考コード

参考までに現在のコードを添付いたします。

php

1// function.php 2function sub_loop($type = "", $number = -1, $paged = "", $tag_name="") { 3 $args = array( 4 'post_type' => $type, 5 'posts_per_page' => $number, 6 'no_found_rows' => false, 7 'tag' => $tag_name, 8 'paged' => $paged, 9 ); 10 11 $wp_query = new WP_Query($args); 12 13 return $wp_query; 14} 15 16function pagination($pages = '', $range = 2) { 17 $showitems = ($range * 2)+1; 18 19 global $paged; 20 if (empty($paged)) { 21 $paged = 1; 22 } 23 24 if ($pages == '') { 25 global $wp_query; 26 $pages = $wp_query->max_num_pages; 27 if (!$pages) { 28 $pages = 1; 29 } 30 } 31 32 if (1 != $pages) { 33 echo '<ul class="p-pagination">'; 34 if ($paged > 1) { 35 echo "<li class='p-pagination__icon -arrow'><a class='p-pagination__link -arrow -prev' href='".get_pagenum_link($paged - 1)."'><span></span></a></li>"; 36 } 37 38 for ($i=1; $i <=$pages; $i++) { 39 if (1 !=$pages &&(!($i>= $paged+$range+1 || $i <= $paged-$range-1) || $pages<=$showitems)) { 40 echo ($paged==$i)? "<li class='p-pagination__icon'><a class='p-pagination__link is-active' href='".get_pagenum_link($i)."'>".$i."</a></li>" : "<li class='p-pagination__icon'><a class='p-pagination__link' href='".get_pagenum_link($i)."'><span>".$i."</span></a></li>"; 41 } 42 } 43 44 if ($paged < $pages) { 45 echo "<li class='p-pagination__icon -arrow'><a class='p-pagination__link -arrow -next' href='" .get_pagenum_link($paged + 1)."'><span></span></a></li>"; 46 } 47 echo '</ul>'; 48 } 49 }

php

1// page-jobs.php 2<ul class="p-news-panel__news-list"> 3 <?php 4 $the_query = sub_loop("projects", 1, $paged); 5 if ($the_query->have_posts()) : while ($the_query->have_posts()) : 6 $the_query->the_post(); 7 ?> 8 <li class="p-news-panel__news"> 9 <a href="<?php the_permalink();?>"> 10 <div class="p-news-panel__news-info"> 11 <p class="p-news-panel__news-created-at"> 12 <time><?php the_time('Y.m.d');?></time> 13 </p> 14 <ul class="p-news-panel__news-tags"> 15 <?php $tags = get_the_tags(); 16 if ($tags) { 17 foreach($tags as $tag) { 18 echo '<li class="p-news-panel__news-tag js-post-tag '. $tag->slug .' ">' . $tag->name . '</li>'; 19 } 20 } 21 ?> 22 </ul> 23 </div> 24 <h3 class="p-news-panel__news-title"> 25 <span><?php the_title();?></span> 26 </h3> 27 </a> 28 </li> 29 <?php 30 endwhile; 31 endif; 32 wp_reset_postdata(); 33 ?> 34 </ul>

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

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

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

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

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

yuki84web

2021/06/22 12:43

「ページネーションが機能しなくなります」とは具体的にどうなるのでしょうか? ざっと見た感じ、表示させるページ番号をWP_Queryの引数に渡すことが出来れば意図したページは表示出来るはずなのですが…
vanilla_dev

2021/06/22 13:51 編集

返信ありがとうございます。 固定ページ内で、以下のようにサブループを2回使用すると、ページネーション自体が出現されなくなる感じです。 1回目のサブループで「募集中」のタグを持つ記事を出力し、2回目のサブループで「終了」のタグをもつ記事を出力するようにしています。 ``` <ul class="p-news-panel__news-list"> // 「募集中」のタグを持つ記事を出力 <?php $the_query = sub_loop("projects", 1, $paged, "募集中"); if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); ?> <li class="p-news-panel__news"> <a href="<?php the_permalink();?>"> <div class="p-news-panel__news-info"> <p class="p-news-panel__news-created-at"> <time><?php the_time('Y.m.d');?></time> </p> <ul class="p-news-panel__news-tags"> <?php $tags = get_the_tags(); if ($tags) { foreach($tags as $tag) { echo '<li class="p-news-panel__news-tag js-post-tag '. $tag->slug .' ">' . $tag->name . '</li>'; } } ?> </ul> </div> <h3 class="p-news-panel__news-title"> <span><?php the_title();?></span> </h3> </a> </li> <?php endwhile; endif; wp_reset_postdata(); ?>    // 「終了」のタグを持つ記事を出力    <?php $the_query = sub_loop("projects", 1, $paged, "終了"); if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); ?> <li class="p-news-panel__news"> <a href="<?php the_permalink();?>"> <div class="p-news-panel__news-info"> <p class="p-news-panel__news-created-at"> <time><?php the_time('Y.m.d');?></time> </p> <ul class="p-news-panel__news-tags"> <?php $tags = get_the_tags(); if ($tags) { foreach($tags as $tag) { echo '<li class="p-news-panel__news-tag js-post-tag '. $tag->slug .' ">' . $tag->name . '</li>'; } } ?> </ul> </div> <h3 class="p-news-panel__news-title"> <span><?php the_title();?></span> </h3> </a> </li> <?php endwhile; endif; wp_reset_postdata(); ?> </ul> ```
guest

回答1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問