ページナビゲーションで有名な「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');
?>
これでちゃんと動きました。
これでちゃんと動かない場合は、細かいところがどこか違っていることが多いので、要確認。