web-dev-qa-db-ja.com

ページングとカスタムサブクエリでajaxを使う

さまざまなコンテンツを取得するために3つのクエリを使用するページがあります。これらのクエリの1つは、ページのトピックに関連する投稿を取得します。これらの投稿はあらゆる種類のもので、さまざまな方法(さまざまなマジックフィールドで定義された値、それらのカテゴリなど)を通じて関連付けられるため、カスタムクエリを使用してそれらを取得します(引数を作成してWP_Queryに渡します)。 )$collected_child_posts = new WP_Query($args);

現在私は一度に5件の結果を返します(私の引数では'posts_per_page' => 5を持っています)そしてMORE POSTSリンクをクリックしたときに結果のブロックだけが更新されるようにajaxを使ってそれらの結果をページングします。

これを実装したのは、MORE POSTSのように見える?paged=nボタンにURLを追加し、それをajaxで取得することです。問題は、自分自身の投稿だけが欲しいときに、ページ全体(希望の投稿を含む)を元に戻すことです。

ページ全体を返さずに副照会からそれらの投稿だけを取得するための最良の方法についてのアイデアはありますか?

ありがとうございます。

1
gaoshan88

2つの選択肢 -

jQueryのloadメソッド を使用してページフラグメントをロードします(ページフラグメントのロードを参照)。

あるいは投稿をロードしてあなたが望むどんなマークアップでもそれを返すためにあなた自身のajax関数を作成する:

add_action('wp_ajax_my_ajax_get_posts', 'my_ajax_callback');
add_action('wp_ajax_nopriv_my_ajax_get_posts', 'my_ajax_callback');
function my_ajax_callback() {
    $args = $_POST['myargs'];
    $collected_child_posts = new WP_Query($args);
    echo 'some stuff';
    die();
}

admin-ajaxのURLを wp_localize_script を介してjavascriptに渡すか、admin_url('admin-ajax.php');を介して直接テンプレートに配置します。

それからadmin-ajax.phpを呼び出してajaxアクションを渡します。

jQuery(document).ready(function($){
    $.post(your_ajaxurl, {
        action: 'my_ajax_get_posts',
        myargs: args
    },
    function(data) {
        alert(data);
    });
});

最初の方法は明らかに簡単ですが、この方法でajax呼び出しを実行するためにロードされるWPの量がはるかに少ないため、サーバーでは2番目の方法が簡単です。

1
Milo