NARUMASA CREATIVE DESIGN
Copyright © narumasa.com
All rights reserved.

wp-pagenaviで何をやってもページ送りが404NotFoundになってしまう場合

ページナビゲーションで有名な「WP-pagenavi」。

すごい使いやすく、設定も簡単なのに、パーマリンクの設定等によって使えないことがよくありました。

カテゴリーURLの「/category/」を消してみたり、固定ページにも「.html」を追加してみたりするとさらに使えなくなっていました。

そこで、3時間ぐらいいろいろと試したところ、何とか解決したので、ここに解決方法を残しておきます。

パーマリンクの設定

パーマリンクの設定で良くやる「.html」を最後につけるタイプ。

/%category%/%postname%.html

WP-pagenaviの設定

通常通りの設定。

<?php
//ページ番号の取得
$paged = get_query_var('paged') ? get_query_var('paged') : 1;

//ループ
$content_query = new WP_Query(array(
  'paged' => $paged,
  'posts_per_page' => 10,
));

//表示部分
if(function_exists('wp_pagenavi')){
  wp_pagenavi(array('query'=>$content_query));
}
?>

functions.phpの設定

ここがおそらくいちばんの問題点。

<?php
/* 固定ページのURLの拡張子をhtmlに変更する */
add_action( 'init', 'mytheme_init' );
if ( ! function_exists( 'mytheme_init' ) ) {
  function mytheme_init() {
    global $wp_rewrite;
    $wp_rewrite->use_trailing_slashes = false;
    $wp_rewrite->page_structure = $wp_rewrite->root . '%pagename%.html';
    flush_rewrite_rules( false );
  }
}
/* カテゴリURLからcategoryを削除 */
function catbase_function($link) {
  return str_replace("/category/", "/", $link);
}
function catbase_flush_rules() {
  global $wp_rewrite;
  $wp_rewrite->flush_rules();
}
function catbase_rewrite($wp_rewrite) {
  $new_rules = array('(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2));
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_filter('user_trailingslashit', 'catbase_function');
add_action('init', 'catbase_flush_rules');
add_filter('generate_rewrite_rules', 'catbase_rewrite');
?>

これでちゃんと動きました。

これでちゃんと動かない場合は、細かいところがどこか違っていることが多いので、要確認。

【WordPress】WP以外のページからニュースなどを呼び出す方法
【Excel】CSVの文字化けを取り込む方法