chatmさん、こんにちは。
$paged
が空じゃないですか?
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
などのように取得してます?
ご参考になれば。
ご返答ありがとうございます。そのコードを追加してみても変化ありません。カテゴリー名ならページ送りできるのですが。
date.php など作って月別一覧のページ送りを別に設定すればうまくいくのでしょうか。
やりたい事としては以下であっていますか?
- オリジナルテーマ(クラシックテーマ)を作っている
- アーカイブページテンプレート(
archive.php
等)を編集している
- アーカイブページで、GETパラメータに
cat
があった時に、その値をterm_id
としてクエリに追加したい
コードを見ると、メインクエリ(have_posts()
)の中でさらにサブクエリ($the_query->have_posts()
)を回しているのが気になります。
アプローチとしては、「pre_get_posts
フックで、特定の条件下だけクエリを書き換える(GETパラメータを追加する)」というのが良い気がします。
そうすれば、アーカイブテンプレート側は何も変更しなくても良いはずです。(paginate_links()
関数のパラメータは調整が必要だったかもしれません)
以下サンプルコードです。
注:動作検証はしていません。内容を十分理解した上で、環境に合わせて適宜下さい。
<?php
// GETパラメータにcatがあった場合、クエリに追加する
function custom_pre_get_posts( $query ) {
// 管理画面のクエリまたはメインクエリまたは月別アーカイブではない場合は何もしない
if ( is_admin() || ! $query->is_main_query() || ! is_month() ) {
return;
}
// GETパラメータ取得
$cat = get_query_var( 'cat', 0 );
if ( $cat > 0 ) {
// クエリ追加
$tax_query = array(
array(
'taxonomy' => 'your_taxonomy_name',
'field' => 'term_id',
'terms' => $cat,
),
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'custom_pre_get_posts' );
// クエリ変数を追加する
function custom_query_vars( $vars ) {
$vars[] = 'cat';
return $vars;
}
add_filter( 'query_vars', 'custom_query_vars' );
ご返答ありがとうございます。
・オリジナルテーマを自作し、wp6.2.2グーテンベルグで稼働させています。
・カテゴリー●●ページの一覧アーカイブページを作ってcategory-●●.phpというテンプレートにして、上記のコードを書いています。
・カテゴリーや子カテゴリーの一覧ならページ送りができるのですが、月別アーカイブだけがページ送りできません。
たぶん、ダッシュボードの表示件数は12件ですが、このカテゴリー●●だけfunction.phpで4件だけ表示させる設定をしています。
これが怪しいのかもしれません。下記の●●はカテゴリースラッグ名です。
4は表示件数です。これを外せば表示件数12件超えればページ送りできそうな気もしますが。
//ページの表示件数を、特定のカテゴリーアーカイブや投稿タイプによって変更する
function my_paginate(){
global $wp_query, $paged;
$p_base = get_pagenum_link(1);
$p_format = 'page/%#%';
if($word = strpos($p_base, '?')){
$p_base = get_option(home).(substr(get_option(home), -1 ,1) === '/' ? '' : '/')
.'%_%'.substr($p_base, $word);
} else{
$p_base .= (substr($p_base, -1 ,1) === '/' ? '' : '/') .'%_%';
}
echo paginate_links(array(
'base' => $p_base,
'format' => $p_format,
'total' => $wp_query->max_num_pages,
'current' => ($paged ? $paged : 1),
'end_size' => 1,
'mid_size' => 2,
));
}
function change_posts_per_page($query) {
if( is_admin() || ! $query->is_main_query() ){
return;
}
// 「●●」のカテゴリーページで表示件数を4件にする */
if ( $query->is_category( array('●●') )) {
$query->set( 'posts_per_page', '4' );
return;
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
-
この返信は1年、 3ヶ月前にchatmが編集しました。
function.phpの記述を削除したらできました。お騒がせしました。
ご返答頂きありがとうございます。