WordPressのコメントの重複ページ

※WordPress 2.8.4 で調べたコメントの重複ページに関するメモ・まとめ

出てくるオプションや関数などについては コメントオプションの設定値を表にまとめたWordPressのコメント系関数のメモを参照。

コメントページ番号と重複ページの関係

複数にわたるコメントページの設定がON 且つ 複数にわたるコメントページが存在する時の、 コメントページ番号と内容の重複関係を下の表にまとめる。

  • 最初(oldest):default_comments_page == "oldest" のとき
  • 最後(newest):default_comments_page == "newest" のとき

コメントオプション値の表を参照

↓ページ番号 χ最初(oldest)最後(newest)
χ < 0
χ = 0××
χ = 1×
1 < χ < MAX
χ = MAX×
χ > MAX
  • ×:投稿ページトップ (コメントページではない投稿ページ) とコメント内容が重複する
  • ○:正しいコメントページ番号のページ
  • ▲:コメントが全て表示され、ページトップへのリンクが表示される
  • ▼:コメントはなにも表示されず、そのページから1を引いたページ番号へのコメントリンクが表示される

なんらかに組み込んだ関数

上記の内容を考慮して、なんらかのブツ に組み込んだ関数が以下のもの。

//パーマリンクを返すワケではなく
//必要があれば引数 $url にコメントページ用のURLを付加して返すだけ。
//ページ番号が最大ページを超えたり、マイナス値の場合はFALSEを返す。
function add_cpage( $url ) {
  global $post, $wp_rewrite;

  //コメントページ番号を取得
  $cpage = intval( get_query_var('cpage') );

  //複数にわたるコメントページが存在するかどうかの条件判定部
  //条件を満たさなければ 引数 $url をそのまま返す
  //パスワード保護されている場合は、分割コメントページが存在しても通さない
  if( $cpage !== 0
   && $post->comment_count != 0
   && get_option('page_comments') === '1'
   && $post->post_password === ""
  ){

    //条件判定に必要な材料をそろえる
    $comments = get_comments(
      array('post_id' => $post->ID, 'status' => 'approve' )
    );

    //複数にわたるコメントページの最大ページを取得
    $max = (int) get_comment_pages_count(
      $comments,
      intval( get_option('comments_per_page') ),
      intval( get_option( 'thread_comments' ) )
    ) ;

    //default_comments_page のオプション設定が"newest"ならTRUE
    $option = get_option('default_comments_page') === 'newest' ;

    //コメントページ番号と重複ページの関係に従って条件分岐
    if( ( !$option && 1 <  $cpage && $cpage <= $max )
     or (  $option && 1 <= $cpage && $cpage <  $max ) ){

      //パーマリンクの設定で条件分岐
      // $url の後ろに コメントページ用のULR をくっつける
      if($wp_rewrite->using_permalinks())
        return user_trailingslashit(
          trailingslashit($url) . 'comment-page-' . $cpage
        );

      else
        return add_query_arg( 'cpage', $cpage, $url );

    } elseif ( ( !$option && $cpage === 1    )
      or       (  $option && $cpage === $max ) ){
      return $url ;

    } else {
      return FALSE ;

    }
  }
  return $url;
}

user_trailingslashita などは

ワードプレスのパーマリンク構造と末尾のスラッシュ を参照して下さい。

Share