web関連

Intuitive Custom Post を使ってるけど特定のphpファイルのみ日付順に並べたかった時のメモ

2018/06/15
Intuitive Custom Post を使ってるけど特定のphpファイルのみ日付順に並べたかった時のメモ

タイトル通りなのだが、Intuitive Custom Postを生かした状態でarchive.phpの方で出力される一覧は日付順に並べるという要望。
それだけであれば良かったのだが、今回のお客さんはテーマを購入しており、あまり既存のテーマの中身を書き換えたくなかった時の備忘録

参考になったサイト様

参考

▼【 WordPress 】Intuitive Custom Post Orderで並び替えしていて、日付順で並ばせたいところは除外させたい対処法(ΦωΦ)
http://www.fumufumu.info/wp/1559/

最悪「Intuitive Custom Post」を切ればいいかとか思っていたのですが、今回の作業内容にドストライクな記事があったので紹介しときます。
以下はサイト通りにやったら上手くいったので、その時の備忘録

実際に使用したコ―ド

参考サイト見てたら2パターン用意してくれてるのでどちらも使い方載せときます。

function.phpとarchive.phpに記述するパターン

↓function.phpに書く

function get_querylist($catslug){
  wp_reset_postdata();
  wp_reset_query();
  if($catslug){
    $me = $catslug;
  }else{
    $meid = get_query_var('cat');
    $me = get_category($meid);$me = $me->slug;
  }
  $listargs = array(
    'post_status' =>'publish',
    'post_type' =>'post',
    'category_name' => $me,
    'order' => 'DESC',
    'orderby' =>'date'
  );
  $querylist = new WP_Query( $listargs );
  wp_reset_query();
  return $querylist;
}

↓archive.phpに書く

<?php if ( have_posts() ) : ?>
<?php
  $query = get_querylist('');
  while ( $query->have_posts() ) : $query->the_post();
?>

// ループするコード

<?php endwhile; ?>
<?php else: ?>
<?php endif; ?>
「get_querylist(‘ここ’)」にカテゴリー名をいれればカテゴリーの一覧も取得できるっぽいです。
function.phpに関数置いといて、別ファイルで呼び出す。こういうのを「フック」というのだろうか?
参考サイトにある通り「フック」を理解したら最強らしいので勉強する。

参考

▼もう開発で苦しまない!「フック」を理解したらWordPressは最強のCMSになる
https://www.webprofessional.jp/wordpress-hook-system/

archive.phpだけに記述すれば完結するコード

<?php
  $args = array('order' => 'DESC','orderby' =>'date');
  $showquery = new WP_Query( $args );
?>

<?php if ( have_posts() ) : ?>
<?php
  while ( $showquery->have_posts() ) : $showquery->the_post();
?>

// ループするコード

<?php endwhile; ?>
<?php else: ?>
<?php endif; ?>
実際に使ってみて正直こんな風な書き方できると思っていなかった(勉強不足)
「while ( have_posts() ) : the_post();」って知らべたらデータベースから1件づつ記事があるかどうか調べて(have_posts())、あれば次の記事を取得(the_post())してそれを繰り返してるんですね(while())基本コピペだから何気なく使ってた。勉強不足だー…

参考

▼WordPressテーマの「while (have_posts()) : the_post();」の意味は?
https://php1st.com/1202/

まぁー「WP_Query」や「get_posts」を使える状況であればそっちを使った方が早いんだけどね、作者さんも公式サイトでそれらの上書き方法書いてくれているし

▼WordPress 直感的に投稿記事の並び順を変更するプラグインを公開しました Intuitive Custom Post Order(作者さんのサイト)
https://hijiriworld.com/web/wp-intuitive-custom-post-order/