サブループをカスタムフィールドのキーでソートする (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