表題の件について、指定方法の誤りをご指摘いただきたく質問させていただきます。
お分かりの方がいらっしゃいましたら、対処をご教示いただけますと幸いです。
実現したいこと
WordPressの投稿者アーカイブ閲覧時、「選択した投稿者」と「特定の投稿者」の記事一覧を表示したい。
ページネーションもつけたい。(wp_pagenaviを使用しているが、他でもよい)
イメージとしては、飲食店のサイトで各店舗にアカウントが存在するような状況。
特定の店舗の投稿者アーカイブを閲覧した際、
指定された店舗のブログと、全店舗用のアカウントから投稿されたブログを一覧で出したい。
状況
- author.php内でWP_Queryを用いて、2つのユーザーの投稿を取得・表示。
- 表示は想定通りにできるが、2ページ目へ移動した時、noufoundになる。
- 指定した投稿者の投稿記事数は4件、サブクエリで指定した投稿者の投稿記事数は3件。ページあたりの表示件数は5件。
※下記、テスト用に作成したauthor.phpです。
php
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 <?php wp_head(); ?> 9 <style> 10 .inner { margin: 0 auto; max-width: 1100px; width: 100%;} 11 .flex { display: flex;} 12 #main { flex: 1; margin-right: 2em;} 13 .post-item { margin: 1em; padding: 1em; border: 1px solid #eee;} 14 .post-item .title { border-bottom: 2px solid #f00; font-size: 1.3em;} 15 .btn { display: inline-block; padding: .3em 0; min-width: 10em; background: #f00; color: #fff; font-weight: 700; text-align: center; text-decoration: none;} 16 .center { text-align: center;} 17 18 #side { margin-top: 1em; width: 300px;} 19 #side h2 { margin: 0 0 1em; padding: .3em .5em; background: #f00; color: #fff; font-size: 1em; font-weight: 700;} 20 #side .wiget > li { margin: .5em 0; } 21 #side .wiget > li a { text-decoration: none;} 22 23 .wp-pagenavi { margin: 3em 0; text-align: center;} 24 </style> 25</head> 26<body> 27 <div class="inner flex"> 28 <div id="main"> 29 <?php 30 $paged = get_query_var('paged', 1); 31 32 // URLから投稿者のIDを取得 33 $url = $_SERVER["REQUEST_URI"]; 34 $authorname = basename ( $url ); 35 $authorname = get_user_by('login', $authorname ); 36 $user_ID = $authorname->ID; 37 38 $args = array( 39 'paged' => $paged, 40 'author__in' => array(1,$user_ID),// 全店 + 指定店舗の投稿を表示 41 ); 42 $the_query = new WP_Query($args); 43 if($the_query->have_posts()){ 44 while($the_query->have_posts()): $the_query->the_post(); 45 ?> 46 <div class="post-item"> 47 <a href="<?php the_permalink(); ?>"> 48 <h2 class="title"><?php the_title(); ?></h2> 49 <p><?php the_excerpt(); ?></p> 50 </a> 51 </div> 52 <?php 53 endwhile; 54 } 55 ?> 56 57 </div><!-- #main --> 58 <div id="side"> 59 <h2>投稿者</h2> 60 <ul class="wiget"> 61 <?php wp_list_authors(); ?> 62 </ul> 63 </div><!-- #side --> 64 </div> 65 66 <?php wp_pagenavi(array('query' => $the_query)); ?> 67 <?php wp_reset_postdata(); ?> 68 69 <?php wp_footer(); ?> 70</body> 71</html>
推測と行った対処
ページを読み込んだ時点ではデフォルトの条件のまま(指定された投稿者のみ)読み込んでいるので、2ページ目が存在しない判定となるのではないかと思う。
→指定された投稿者の投稿件数 = 4件、ページあたりの件数は5件だから2ページ目は存在しない判定。
→指定された投稿者 = 4件と、特定の投稿者の3件を加えて7件と認識してほしい。
そこでメインクエリが発行される前に条件を書き換えようと考え、functions.php内にpre_get_postsで同様の指定を行ったが、投稿者の指定が効かなかった。
php
1function get_author_posts($query) { 2 if ( is_admin() || ! $query->is_main_query() ){ 3 return; 4 } 5 6 if ( $query->is_author() ) { 7 // URLから投稿者のIDを取得 8 $url = $_SERVER["REQUEST_URI"]; 9 $authorname = basename ( $url ); 10 $authorname = get_user_by('login', $authorname ); 11 $user_ID = $authorname->ID; 12 13 $query->set( 'author__in', array(1,$user_ID) );// 全店 + 指定店舗の投稿を表示 14 return; 15 } 16} 17add_action( 'pre_get_posts', 'get_author_posts' );
そもそも、author.phpで実現しようとすることが間違いかとも考えております。
投稿者のリンクにGETで値を持たせて、固定ページで出力する方が正しいでしょうか。
対処がお分かりの方がいらっしゃいましたら、ご教示いただけますと幸いです。
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。