web-dev-qa-db-ja.com

WP_Comment_Queryのページ付け、未知のものへの探求

ページネーションを目指しています WP_Comment_Query() 。これはタブーであるか、それに関する実行可能な情報がない オンライン のいずれかです。

どうして?出来ますか?もしそうなら、 how

6

はい、可能ですが、少し苦痛です。

codexページ を見ると、noteの引数だけがnumberoffsetです。

ページ付けされたページを作成するためにこれら2つが必要です。

まず、現在のページである$pagedパラメータを設定します。

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

表示するコメントの数

$number = 3;

その後、オフセット(クエリがコメントを引き出す場所)を計算します。

$offset = ( $paged - 1 ) * $number;

それらすべてをarguments変数に配置しましょう。

// arguments to filter comments
$args = array(
    'number' => $number,
    'offset' => $offset,
    'paged' => $paged
);

それでは、クエリをヒットしてループしてみましょう。

// the query
$the_query = new WP_Comment_Query;
$comments = $the_query->query( $args );

// Comment Loop
if ( $comments ) {

    foreach ( $comments as $comment ) {
        echo '<p>' . $comment->comment_content . '</p><br><br>';
    }

} else {

    echo 'No comments found.';

}

優秀な。これで、URLバーに/page/2を追加して、それが機能するかどうかを確認できます。

欠けている唯一のものは、例えばnext_posts_link()関数のようなページネーションリンクを追加することです。

問題は私がmax_num_pagesを取得する方法を見つけていないということです。以下は通常、単純なWP_Queryで機能します。

$the_query->max_num_pages

しかし、それはここでは動作しません。最大ページ数を知らないと、ページ付けリンクを正しく作成できません。 count($comments)は1ページあたりの総コメント数($number)のみを返すことに注意してください。

個人的には、ターゲットとしているカスタムクエリで最大ページ数を計算することでこれを修正しました。ユーザーID別にコメントの合計数を取得したいと思いました。だから私はこのようにその番号を使用しました:

$maximum_pages = $user_total_comments / $number;

これは私の場合はうまくいきますが、max_num_pagesを取得する方法が間違いなく必要です。うまくいけば、この答えで、それは 誰かが最後のビットを解決するように促すでしょう 。少なくともここではwp_comment_query()を使ったページ付けについてもっと多くの情報があります。

更新

それで、残りの問題はmax_num_pagesの欠如でした。これを解決する1つの方法は、返されたpostの配列をcount()し、それが$numbernumber配列キーに設定したもの)と一致するかどうかを確認することです。

$tot_returned_comments = count($comments);

if ($number == $tot_returned_comments) {
    echo '<a href="/comments/page/' . $nextpage . '">Next</a>';
}

最後のページがあなたの$number変数で設定したのと全く同じ投稿数を持っている場合を除いて、これはすべての場合にうまくいきます。そのため、$numberを15に設定し、最後のページ番号付きページに15個の結果がある場合は、次のボタンが表示されます。

これで、パフォーマンスを気にしなくても、2つのクエリを簡単に実行できます。結果を制限せず、単に結果をcount()し、そのカウントをmax_num_pages値に使用するもの。

これはmax_num_pagesを取得することの欠如を解決するものではありませんが、wp_comments_query()のための完全に機能するページ付けであなたをあなたの足であなたに連れて行くのに十分であるべきです。

8

この問題を処理する別の方法は、get_comments()と一緒にpaginate_links()(または同様のクエリ)を使用することです。特にmax_num_pagesと同等のものを取得するには、組み込み関数wp_count_comments()を使用できます。

それで、あなたの最大ページ数を得るために、あなたは最初にあなたが望むすべてのコメントのカウントを作り出すでしょう。未承認のコメントを望まないと仮定します。

$all_comments = wp_count_comments();
$all_comments_approved = $all_comments->approved;

$ all_comments_approvedをページあたりのコメント数で割るのは簡単なことです。それで、ページごとに望ましい "n"のコメントで:

//Adding one at the end as simple way of rounding up. 

$max_num_pages = intval( $all_comments_approved / $comments_per_page ) + 1;  

($ comments_per_pageの値は> 0にプリセットされているべきで、メインのコメントクエリでも使われます - 下記参照)。

完全なページ付け機能は、他の項目によっては、次のようになります。 (例:URLにクエリ変数があると 'base'オプションが難しくなる場合があります。1つのアプリケーションでこの問題を回避するにはpreg_replaceを使用する必要がありました。)

$current_page = max(1, get_query_var('paged'));

echo paginate_links(array(
        //check codex for how to work with get_pagenum_link and variations
        'base' => get_pagenum_link(1) . '%_%',
        'current' => $current_page,
        'total' => $max_num_pages,
        'prev_text' => __('&laquo; Previous'),
        'next_text' => __('Next &raquo;'),
        'end_size' => 2,
        'mid-size' => 3
));

...そして残りは出力のフォーマットとメインコメントクエリです。後者は次のようになります。$ comments_per_pageは、取得されるコメントの数とオフセットの計算の両方にとって重要です。また、取得されたオブジェクトの合計サイズは数によって制限されます( 'status'によっても制限されます)。

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$offset = ($paged - 1) * $comments_per_page;


$comments = get_comments(array(
'status' => 'approve',
'number' => $comments_per_page,
'offset' => $offset
));
3
CK MacLeod