前提・実現したいこと
キーワード検索でヒットした記事一覧で、特定のカスタム投稿のみ表示したいのですが、どうやってページャーを表示させればいいかが分かりません
現状、特定のカスタム投稿のみの検索結果はちゃんと表示されており、検索結果の2ページも存在はしています
http://localhost:8001/page/2/?s=キーワード
のように入力すると、ちゃんと記事は表示されます
あとはページャーを表示させれば完成なのですが、タクソノミーの記事一覧などでやっているページャーの表示方法でやっても上手くいきませんでした
functions.php(これで特定のカスタム投稿のみを検索結果に出るように)
function my_pre_get_posts($query) { if (!is_admin() && $query->is_main_query() && $query->is_search()) { $query->set('post_type', 'custom-post'); } } add_action('pre_get_posts','my_pre_get_posts'); function my_posts_search($search) { if(is_search()) { $search .= " AND (post_type = 'custom-post')"; } return $search; } add_filter('posts_search', 'my_posts_search');
search.php(これで検索結果を出力)
<?php if (have_posts()): ?> <?php if (isset($_GET['s']) && empty($_GET['s'])) : ?> <h1 class="c-underlayer-heading">「」の検索結果:0件</h1> <?php else : ?> <div class="c-content__heading"> <h1 class="c-underlayer-heading"><?php echo '<span>' . $_GET['s'] . '</span>の検索結果:' . $wp_query->found_posts . '件' ; ?></h1> </div> <div class="c-article-card"> <?php while(have_posts()): the_post(); ?> // ここにタイトルとか <?php endwhile; wp_reset_postdata(); ?> </div> <?php endif; ?> <?php else: ?> <h1 class="c-underlayer-heading"><?php echo '<span>' . $_GET['s'] . '</span>の検索結果:' . $wp_query->found_posts . '件' ; ?></h1> <?php endif; ?>
試したこと
タクソノミーの記事一覧のようなページャーの出力方法を試してみましたが、
下記だと全ての記事が出力されてしまいます
post_type
を消したら全部記事が表示されなくなりました
そもそも、今のpaginate_links
のformat
のurlの形式だと2ページ目以降が404になってしまったので、このコードを流用するとしたら、これも変えなきゃなと思いました。。。
<?php global $max_num_page; $paged = get_query_var('paged') ? get_query_var('paged') : 1; $args = array( 'post_type' => 'custom-post', // wp管理画面の設定 > 表示設定 > 1ページに表示する最大投稿数 // その数値と、posts_per_pageの数値は同じにする // じゃないとpaginate_links()のページャーがうまく動かない 'posts_per_page' => 6, 'orderby' => 'date', 'order' => 'DESC', 'paged' => $paged, ); $the_query = new WP_Query( $args ); while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
ページャー出力↓
<?php if ($the_query->max_num_pages > 1) { echo '<div class="c-pagination">'; echo paginate_links( array( 'base' => get_pagenum_link(1).'%_%', 'format' => 'page/%#%/', 'current' => max(1, $paged), 'total' => $the_query->max_num_pages, 'type' => 'list', 'mid_size' => '1', 'prev_text' => '<', 'next_text' => '>' ) ); echo '</div>'; } ?>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。