My開発メモ

サブループをカスタムフィールドのキーでソートする (WordPress)

読書メモのアプリをWordPressで作成していて、カスタムフィールドに
ページNOを記録している。

メインループをカスタムフィールドのキーでソートするのはできるのだが、アーカイブページに切り替えボタンを作成して、それによってソートを切り替える方法が思いつかなかった。

メインループをカスタムフィールドのキーでソートする (WordPress)

そこで、サブループをカスタムフィールドのキーでソートすることにした。

archive.php を以下のようにすればできる。

archive.php
<?php
$sort_by = '';
if (isset($_POST['order']) && $_POST['order'] !== '') {
  if ($_POST['order'] === 'page') {
    $sort_by = 'page';
  } 
}
?>
<?php
$args = array();
if ($sort_by === 'page') {
  $args = array(
    'post_type' => 'post',
    'post_per_page' => '-1',
    'orderby' => 'meta_value',
    'order' => 'asc',
    'meta_key' => 'page_number'
  );
} else {
  $args = array(
    'post_type' => 'post',
    'post_per_page' => '-1'
  );
}
$the_query = new WP_Query($args);
?>

...(略)...

// サブループ
<?php if ($the_query->have_posts()) : ?>
  <?php while ($the_query->have_posts()) : ?>
    <?php $the_query->the_post(); ?>
    <?php get_template_part('content-archive'); ?>
  <?php endwhile; ?>
<?php endif; ?>

<?php wp_reset_postdata(); ?>

そして、この archive.php のどこかに、以下のフォームを設置しておいた。

<?php if ($sort_by === 'page') : ?>
  <form action="" method="post">
    <input type="submit" value="U"/>
  </form>
<?php else : ?>
  <form action="" method="post">
    <input type="hidden" name="order" value="page"/>
    <input type="submit" value="P"/>
  </form>
<?php endif; ?>

これで一覧ページのソートを切り替えることができた。

本当は メインループでできたらよかったんだけど、機能的には満足している。

参考

メインループをカスタムフィールドのキーでソートする (WordPress) | My開発メモ

カテゴリー: memo, wordpress

タグ: カスタムフィールド, サブループ, ソート, ソート切り替え

カウント: 65