tag.phpやauthor.phpでWP-PageNaviのページャーがうまく動かない場合の対処法

pagenav

WordPressでカスタム投稿やカスタム分類を利用しているとうまく動かない箇所が多々でてきます。今回はタグとユーザーページで記事一覧を表示した場合に/page/2以降が404エラーになってしまったのでその解消法をメモ。

またカスタム投稿とカスタム分類を利用している場合ですのでご注意ください。

WP-PageNaviかWPそのものがauthorに対応していないのでfunctionでフック

プラグインかそもそものWordpressが対応していないかまではちょっと判りませんでした。感触としてはWordpress本体が対応していないっぽいですが・・・

ページャーに対応させるためにfunction.phpに以下の記述を追加します。
これでauthor.phpやtag.php内で正常に記事数を取得でき、/page/2が404エラーを出さずにページャーが動きます。

author.php用にfunction.phpに記述

function custom_author_archive( &$query ) {
if ($query->is_author)
$query->set( 'post_type', array( 'post', 'post名1' , 'post名2' ) );
}
add_action( 'pre_get_posts', 'custom_author_archive' );

tag.php用にfunction.phpに記述

function custom_tag_archive( &$query ) {
if ($query->is_tag)
$query->set( 'post_type', array( 'post', 'post名1' , 'post名2' ) );
}
add_action( 'pre_get_posts', 'custom_tag_archive' );

2つはほぼ同じ記述ですが「custom_author_archive」→「custom_tag_archive」と、変更してあります。

おまけ:author.phpでカスタム投稿の一覧を表示

ユーザーの情報を取得して記事の絞込を行う必要があります。


<?php
// カスタム投稿の宣言
$author_id = get_the_author_meta( ID, $author ); //現在のページのユーザIDを取得
$args = array(
'author' => $author_id, // ここを1にするとユーザーID1の記事を固定で表示できる
'post_type' => array('post名' , 'post名2'),
'posts_per_page' => 12,
'paged' => get_query_var( 'paged' ),
);
query_posts( $args );
?>

<?php if(have_posts()) while(have_posts()) : the_post(); //ループ ?>
<p><?php if(mb_strlen($post->post_title)>42) { $title= mb_substr($post->post_title,0,42) ; echo $title. ・・・ ;} else {echo $post->post_title;}?></p>
<?php endwhile;?>

You may also like...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です