💬

wordpress サブクエリーで沼った話

2022/06/24に公開

wordpressでarchineページで9件表示して10件目から2ページ目に行くようにしようとしたら沼りましたのでまたもやZennに書き記しておきます。

今回の案件ではカスタム投稿をしようしタクソノミーを条件にしarchiveをタブ機能で切り替えれるようにしようとしたときの話です。
こういう感じで実装してたのです、、、、

<?php
  $args = array(
    'post_type' => 'works', // カスタム投稿名
    'posts_per_page' => 4, // 表示数 -1で全部
    'order' => 'DESC', // 並び順 最新
    'tax_query' => array(
      array(
        'taxonomy' => 'custom_tax_name', // カスタム投稿のタクソノミー名
        'terms' => array('toltal'), // ターム名(カテゴリー名)
        'field' => 'slug'
      ),
    ),
  );
$the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ): while ( $the_query->have_posts() ): $the_query->the_post(); ?>
<!-- 内容 -->
<?php endwhile; endif; wp_reset_postdata(); ?>

wordpressの表示件数を9件に設定し、いざ確認してみると

全部きてるやないかい

想定の挙動としては、9件表示されページネーションで10件~19件のようにできると思っていたのですが実際は

全件表示され、しかもページネーションは動いている意味わからん状況でした

ページを切り替えても元々全件表示されとるし、、とググりぐぐるといい記事を見つけたのでシェアします

それからデザイン スタッフブログから
これは便利!WordPressのWP_Queryでよく使うコードスニペット

この記事ではWP_Queryの引き数がまとめられています。

バグが起きていたときのコード

<?php
  $args = array(
    'post_type' => 'post',
    'posts_per_page' => -1,
    'order' => 'DESC',
    'tax_query' => array(
      array(
	'taxonomy' => 'post_custom_tax',
	'terms' => array('test'),
	'field' => 'slug'
      ),
    ),
  );
$the_query = new WP_Query( $args );
?>

治ったコード

<?php
  $args = array(
    'post_type' => 'post',
    'paged' => get_query_var('paged'),
    'order' => 'DESC',
    'tax_query' => array(
      array(
	'taxonomy' => 'post_custom_tax',
	'terms' => array('test'),
	'field' => 'slug'
      ),
    ),
  );
$the_query = new WP_Query( $args );
?>

それからデザイン スタッフブログによると
'paged' => get_query_var('paged')が現在のページから投稿を表示するときの引数だそうです。

wordpressもいいけどreact,nextjsで開発してー....

終わり

Discussion