この実装、面倒なら代行します
投稿のカテゴリごとに投稿一覧を取得する条件を変えたいケースありますよね。そういうときにどうするか、というお話です。
たとえば、1ページに表示する件数とか、並び替えの条件とか、並び順など。追加したい条件が複雑でなければ、メインループに条件を追加するだけでできます。
たとえば、デフォルトが1ページ10件表示、並ぶ条件は「日付」の「新しい順」だとして、
カテゴリ「用語集」(スラッグ:yougo)のときだけ、1ページ100件表示、並ぶ条件は“あいうえお”順にしたいので「タイトル」の「昇順」にしたい場合:
テーマの functions.php に以下を追記します。
function add_condition_to_main_loop($query) { if ($query->is_main_query() && $query->is_category('yougo')) { $query->set('posts_per_page', 100); $query->set( 'orderby', 'title'); $query->set( 'order', 'ASC'); } } add_action('pre_get_posts', 'add_condition_to_main_loop');
上の記述をしておけば「用語集」カテゴリページにおいてのみ取得件数や並ぶ条件が通常と変わります。
特に変わった記述は必要なく、archive.php や category-yougo.php で普通にメインループを回すだけです。
<?php if (have_posts()) { while (have_posts()) { the_post(); //ループ処理 } } //ページネーションの処理 global $wp_rewrite; $paginate_base = get_pagenum_link(1); if(strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()){ $paginate_format = ''; $paginate_base = add_query_arg('paged','%#%'); } else { $paginate_format = (substr($paginate_base,-1,1) == '/' ? '' : '/') . user_trailingslashit('page/%#%/','paged'); $paginate_base .= '%_%'; } echo paginate_links(array( 'base' => $paginate_base, 'format' => $paginate_format, 'total' => $wp_query->max_num_pages, 'mid_size' => 1, 'current' => ($paged ? $paged : 1), 'prev_text' => '<', 'next_text' => '>', )); ?>
この課題を提供してくださったクライアントに感謝です。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。