この問題は私に頭痛を与えており、誰かがそれを修正する方法を知っているかどうか私は思っていました。
レビューというカスタム投稿タイプがあります。これがどのように定義されているかです:
function codex_custom_init() {
$args = array( 'rewrite' => array('slug' => 'review'),
'public' => true,
'has_archive' => true,
'show_ui' => true,
'label' => 'Review',
'publicly_queryable' => true,
'taxonomies' => array('category', 'post_tag'),
'supports' => array( 'title', 'editor', 'comments', 'excerpt', 'custom-fields', 'thumbnail', 'author')
);
register_post_type( 'review', $args );
}
add_action( 'init', 'codex_custom_init' );
私のアーカイブページはarchive-review.phpによって処理され、このようなページではうまく機能します。
http://www.acme.com/review/page/3/
ただし、カテゴリが関係している場合、wordpressは「次の」ページを表示しません。代わりに、404に進みます。たとえば、これにアクセスしようとすると、次のようになります。
http://www.acme.com/category/random/page/2/
それがなぜ404になるのでしょうか。また、もうarchive-review.phpではなくarchive.phpで動くようになりました(これは私が推測している意味です)。
archive.phpクエリのもの:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$cat = get_category(get_query_var('cat'));
$catID = $cat->term_id;
$args = (array('post_type' => array('post', 'review'), 'cat' => $catID, 'paged' => $paged));
query_posts($args);
助けてください!!私は非常にイライラしています!
ページテンプレート内で二次クエリを作成するか、メインクエリを上書きするのが最も簡単で簡単な方法です。
どのページをロードするかrunsテンプレートの前のを決定するメインクエリ。したがって、ページとページをロードするクエリが同期しなくなります。メインクエリは、クエリに対するテンプレート内の変更について知りません。テンプレート内クエリが「メイン」クエリを変更しても問題ありません。変更が遅すぎます。
あなたがする必要があるのはpre_get_posts
でフィルタを使うことです。間違って読んでいない限り、あなたがする必要があるのはpost_status
を設定することだけです。
function set_post_type_for_archive_wpse_109213($qry) {
if ($qry->is_archive()) {
$post_type = $qry->get('post_type');
if (empty($post_type)) {
$post_type = array('post');
}
$post_type[] = 'review';
$qry->set('post_type', $post_type);
}
}
add_action('pre_get_posts','set_post_type_for_archive_wpse_109213');
あなたがWordPress Coreであり、あなたでない限り、query_posts
は適用されません。使わないでください。