質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.37%

  • PHP

    15136questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    4755questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

ワードプレスの承認済みコメント数の範囲でページネーションを生成したい

受付中

回答 2

投稿 2017/12/01 05:24

  • 評価
  • クリップ 0
  • VIEW 58

azalia

score 0

前提・実現したいこと

ワードプレスsingleページにコメント一覧を表示しています
カスタマイズしたい点は下記2点

・承認コメントのみ表示
・承認コメント範囲でページネーションを表示

発生している問題・エラーメッセージ

未承認コメントは表示されないようにできたが、未承認が表示されていた時と同様のページネーションが生成される
(後半空ページのみが生成される)

該当のソースコード

//中略
<?php
    if(comments_open()){

        if(have_comments()){
                    $comments = get_comments(array(
                        'status' => 'approve' //表示したいコメントの種類
                    ));
                    $args = array(
                        'per_page' => 5 //ページに表示される項目数
                    );
            wp_list_comments($args, $comments); //コメントリストの表示
        }

        if(get_comment_pages_count() > 1){
            paginate_comments_links(); //ページナビゲーションの表示
        }

        comment_form();

    }
?>
//中略

試したこと

課題に対してアプローチしたことを記載してください
・wp_list_commentsの$args内per_pageプロパティを変更
→変わらず未承認コメントは表示されないが未承認表示の時と同様のページネーションが生成される

・wp_list_commentsの$args内per_pageを削除し、設定/ディスカッション/コメント設定で同様の制御
→変わらず未承認コメントは表示されないが未承認表示の時と同様のページネーションが生成される

・$argsにpageプロパティを追加した
→変わらず未承認コメントは表示されないが未承認表示の時と同様のページネーションが生成される
→どのページにもプロパティで指定したページの内容が表示されてしまう

・paginate_comments_linksに承認に関するプロパティを様々試す
→該当の項目はなし

補足情報(言語/FW/ツール等のバージョンなど)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

pre_get_comments フックを試してみてはいかがでしょう。

【[WordPress]pre_get_commentsによるコメントの抽出・検索方法 | Wood-Roots:blog】
http://wood-roots.com/web/wordpress/1335

【class-wp-comment-query.php in tags/4.9/src/wp-includes ? WordPress Trac】
https://core.trac.wordpress.org/browser/tags/4.9/src/wp-includes/class-wp-comment-query.php#L374

投稿 2017/12/02 01:13

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/02 02:59

    ご回答ありがとうございます。
    やりたいことからつながりが遠いようでした。
    お手数をおかけしましてすみません。ありがとうございます。

    キャンセル

  • 2017/12/02 03:30

    paginate_comments_links() 内で get_comments()が引数無しに使われているため、pre_get_commentsフックで処理するのが最短だと思いますよ。

    キャンセル

  • 2017/12/02 05:13

    ご回答ありがとうございます。
    すみません、フックなんとかは理解できず申し訳ございませんが、
    おっしゃった通りpaginate_comments_links() にtotal(最大ページ数)という引数があるようでしたのでトライしてみます。
    承認コメント数とページあたりの最大コメント数から割り当てられるかと思っています。

    キャンセル

0

ありたがくヒントをいただき活用できる範囲で現状の要件を満たす動作ができたもの
※アクションフックでもっと効率よくできるようです

<?php

  if(comments_open()){

    if(have_comments()){

      $comments = get_comments(array(
        'status' => 'approve' //表示したいコメントの種類
      ));

      //承認コメント表示数から最大ページ数を取得
      $all_cmt = wp_count_comments(); //すべてのコメント種を取得
      $approved_cmnt =  $all_cmt->approved; //承認済みコメント数を取得
      $per_page = 4; //1ページあたりの最大コメント数
      $page_num = ceil($approved_cmnt / $per_page); //最大ページ数

      $args = array(
        'per_page' => $per_page
      );
      wp_list_comments($args, $comments); //コメントのリスト表示

      $args2 = array(
        'total' => $page_num
        );
      if(get_comment_pages_count() > 1){
        paginate_comments_links($args2); //ページナビゲーションの表示
      }

    }

    comment_form();

  }

?>

投稿 2017/12/02 12:22

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.37%

関連した質問

  • 解決済

    ページネーションの設置

    自作テーマを作成中です。 投稿を5件表示させて、6件目より古い投稿はページネーションによってブラウズ出来るようにさせたいのですが、どうすればよいでしょうか。 現在のコードは以下

  • 解決済

    ページネーションの中央揃い

    ページネーションがデフォルトだとなぜか左揃いになっています。 中央揃いにしたいのですが、 text-align: center; や  margin-le

  • 解決済

    ページネーションがうまく動かない

    前提・実現したいこと wordpressでcategory-column.phpページを作っています。 1ページ5記事でページネーションを作りたいのですが、 2ページ目に行っ

  • 解決済

    ページネーションについて困っております。

    投稿サイトを作ろうとして wpのテーマを海外で購入して TOPにページネーションを入れたのですが、 下層ページのページネーションとの 数字があいません。 修正したくて

  • 解決済

    【wordpress】get_categoriesを使用した際のページネーションの実装について

    お世話になります。 現在wordpressのカスタム投稿のアーカイブページにて、 カスタム投稿タイプの記事の最新記事1件をカテゴリ(タクソノミー)ごとに表示しているのですが、

  • 解決済

    RailsでJSONデータをページネーションしたい

    kaminariやwill_paginateはModelのデータを変数に入れてビューに入れるようですが、 API経由でデータをJSONで取得した場合、ページネーションする方法はな

  • 解決済

    モーダルウィンドウ上でのページネーション

    質問 親カテゴリー毎にページを振り分け、子カテゴリー毎に投稿を並べてアーカイブ表示しているページで、その投稿の要素をクリックするとコンテンツがモーダル上で表示されるように設定して

  • 解決済

    ページネーションのカスタマイズ

    前提・実現したいこと モデルから特定のデータを取り出しページネーションを対応させたいです。 発生している問題・エラーメッセージ 以下のページネーションだと

同じタグがついた質問を見る

  • PHP

    15136questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    4755questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。