回答編集履歴

1 ソースの修正

backn

backn score 25

2018/01/24 01:27  投稿

wordpressで似たような件で悩みこちらに辿り着いたので力になると思ったのですが
ダメでした、すいません。
私の場合
/pagename/comment-page-XX/
/pagename/comments/XX/
に変更したソースになります。
ページャーはwp_commentpagenaviで出力してます。
```
//function.php
//コメントページのスラッグを変更
add_action('init', function(){
   global $wp_rewrite;
   $wp_rewrite->comments_pagination_base = 'comments';
   add_rewrite_rule('(.?.+?)/comments/([0-9]{1,})/?$', 'index.php?pagename=$matches[1]&cpage=$matches[2]', 'top');
global $wp_rewrite;
$wp_rewrite->comments_pagination_base = 'comments';
});
add_filter('rewrite_rules_array',function ($rules){
   $newrules = array();
$newrules['(.?.+?)/comments/([0-9]{1,})/?$'] = 'index.php?pagename=$matches[1]&cpage=$matches[2]';
$newrules['(.?.+?)/comments/([0-9]{1,})/?$'] = 'index.php?pagename=$matches[1]&cpage=$matches[2]';
$newrules['game/[^/]+/attachment/([^/]+)/comments/?([0-9]{1,})/?$'] = 'index.php?attachment=$matches[1]&cpage=$matches[2]';
$newrules['game/([^/]+)/comments/?([0-9]{1,})/?$'] = 'index.php?game=$matches[1]&cpage=$matches[2]';
$newrules['game/[^/]+/([^/]+)/comments/?([0-9]{1,})/?$'] = 'index.php?attachment=$matches[1]&cpage=$matches[2]';
$newrules['.*wp-(atom|rdf|rss|rss2|feed|commentsrss2)\.php$'] = 'index.php?feed=old';
$newrules['comments/feed/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?&feed=$matches[1]&withcomments=1';
$newrules['comments/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?&feed=$matches[1]&withcomments=1';
$newrules['comments/embed/?$'] = 'index.php?&embed=true';
$newrules['.?.+?/attachment/([^/]+)/comments/?([0-9]{1,})/?$'] = 'index.php?attachment=$matches[1]&cpage=$matches[2]';
$newrules['(.?.+?)/comments/?([0-9]{1,})/?$'] = 'index.php?pagename=$matches[1]&cpage=$matches[2]';
$newrules['[^/]+/attachment/([^/]+)/comments/?([0-9]{1,})/?$'] = 'index.php?attachment=$matches[1]&cpage=$matches[2]';
$newrules['([^/]+)/comments/?([0-9]{1,})/?$'] = 'index.php?name=$matches[1]&cpage=$matches[2]';
$newrules['[^/]+/([^/]+)/comments/?([0-9]{1,})/?$'] = 'index.php?attachment=$matches[1]&cpage=$matches[2]';
   return $newrules + $rules;
});
add_filter( 'get_comments_pagenum_link', function( $result ){
if (preg_match( '{(.?.+?)\/comments-([0-9]{1,})\/}', $result, $m)) {
   $result = $m[1] . '/comments/' . $m[2];
   $result = $m[1] . '/comments/' . $m[2].'/';
   return $result;
}
return $result;
}, 10, 2);
add_filter( 'user_trailingslashit', function( $string, $type_of_url ){
if ( $type_of_url === 'commentpaged' ) {
   if (preg_match( '{comments\/}', $string)) {
       return $string;
   if (preg_match( '{(.?.+?)\/comments-([0-9]{1,})\/}', $string, $m)) {
       $result = $m[1] . '/comments/' . $m[2].'/';
       return $result;
       
   }else{
       return '';
   }
}
return $string;
}, 10, 2);
```
/wp-includes/cannonical.php
/wp-includes/class-wp-rewrite.php
/wp-includes/link-template.php
この辺のソースを
'comments_pagination_base'で検索すれば
流れがわかるかと思います。
user_trailingslashitで末尾にスラッシュがない場合つけてた気もするので
?cpage=-2%2F
と出力されるのはuser_trailingslashitで末尾にスラッシュが付与されたからだと思います。
そして%2Fとなってるのはその末尾がURLエンコードされているためだと思います。
また勝手にコメントページがリダイレクトされるのは私もすごく悩みました。
下記で解説されている方が参考になりましたので、ご確認ください。
https://aulta.co.jp/2017/08/15/3805.html
get_commentsで表示してて
?cpage=(Wordpressのページング機能)にこだわらないのであれば
```ここに言語を入力
add_filter( 'query_vars', 'add_query_vars', 10, 1 );
function add_query_vars($vars)
   $vars[] = 'cm';     
   return $vars;
}
```
?cm=XX等でURLクエリパラメータ追加して
自分でページング処理しちゃってもいいのかなとも思います。
間違ってたらごめんなさいー><

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る