web-dev-qa-db-ja.com

ワードプレス AJAX query_postsによるページ付け

リストチェックボックスカテゴリがあります。これをチェックすると、WordPressのadmin-ajax.phpを使用して選択したカテゴリへの投稿をフィルタリングします。

すべてがうまくいっています、しかし、私は更新されたページ付けを得るのに苦労しています。私は次のようにquery_postsを使っています。

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

$args= array
(
 'post_type'=>'course',
    'paged'=>$paged,
    'posts_per_page'=>3,
  'tax_query' => array(
     array(
    'taxonomy' => 'subject',
    'field' => 'slug',
    'terms' => $tags_from_group
    )
    )

);

$posts=query_posts( $args);

$の投稿をデータとして返しますが、更新されたページ区切りにアクセスする方法がわかりません。

私はこれらの線に沿って何かを考えていました:

 $pagedposts=array();
 $pagedposts['posts']=$posts;
 $pagedposts['pagination']=???

つまり、$ pagedposts ['pagination']は、ajax呼び出しが成功した後に古いページを更新するために必要なデータになります。

私は他の誰かがこの問題を抱えているのを見つけました ここ /しかし、そこに解決策はありません...

5
gray

結局、改ページを更新することは不可能であることがわかりました。次の投稿を読み込む方法は、 投稿オフセット を設定して、[もっと読み込む]ボタンを使用することです。

それであなたがより多くの投稿をロードしているあなたのAjax呼び出しでは、 offset値 を渡す必要があります:

$.ajax({
     url: '/wp-admin/admin-ajax.php', 
     type: "POST",
     data: {
            'action': 'filter_posts',
            'selected_options':selected_options,
            'offset':postoffset
       }//etc...

このオフセット値は常に変化するため、値を変数に格納する必要があります。上記では、 'postoffset'を使用しました

あなたがオフセットの値を決定する必要がある方法は簡単です。 jqueryを使って、現在ページ上にある投稿の数を数えることができます。

    var postoffset = $('.hentry').length;

ここで、.hentryは私の投稿クラスの名前です。

PHPスクリプトでポストオフセットを受け取ったら、次のように設定できます。

 $args= array
    (
        'offset'=>$offset,
        'post_type'=>$post_type,
        'paged'=>$paged,
        'posts_per_page'=>9,
        'orderby' => 'title',
        'order' => 'ASC'
    );

そしてそれをあなたのquery_argsにプラグインします(上記のオフセットを決定するのと同様に、私は追加された9つの投稿を明確に見ることができる 'posts_per_page'オプションを追加しました。

$posts=query_posts( $args);

ページネーションを使用せずにload moreボタンを設定するには、ページにdivまたは画像を配置してIDを付けるだけです。

<div id="load-more">LOAD MORE </div>

そしてjquery:

function load_more_button_listener($){
 $('#load-more').click(function(event){
       event.preventDefault();
        var postoffset = $('.hentry').length;

 // console.log("offset: "+postoffset);

  //call the original ajax function to load more posts, with the new offset:
  load_more_posts($,postoffset);
 });  
}
3
gray