web-dev-qa-db-ja.com

Ajaxがさらに投稿を読み込む - WP_Queryパラメータが機能しない

標準的なWPページ付けをAjaxの「もっと投稿を追加」ボタンに置​​き換えようとしています。私は基本的に この質問 からのコードに従っています。これはほとんどの場合うまくいきます。

関連するコードは次のとおりです。

HTML(ブログのインデックスページ):

<div id="content">

<?php $args = array(
    'posts_per_page' => 5
);

if (isset($_GET['views'])) {
  $args['orderby'] = 'meta_value_num';
  $args['meta_key'] = 'post_views_count';
  $args['order'] = 'DESC';
};

$wp_query = new WP_Query($args); ?>

<?php while( $wp_query->have_posts() ): $wp_query->the_post();  ?>
    <?php the_title(); ?>
<?php endwhile; ?>  

<a id="more_posts">Load More</a>

<?php wp_reset_postdata(); ?>

</div>

JS(ブログの索引ページの下部にあります)

var ajaxUrl = "<?php echo admin_url('admin-ajax.php', null); ?>";
var page = 1; // What page we are on.
var ppp = 4; // Post per page

jQuery("#more_posts").on("click",function(){ // When btn is pressed.
    jQuery("#more_posts").attr("disabled",true); // Disable the button, temp.
    jQuery.post(ajaxUrl, {
        action:"more_post_ajax",
        offset: (page * ppp) + 1,
        ppp: ppp
    }).success(function(posts){
        page++;
        jQuery("#content").append(posts);
        jQuery("#more_posts").attr("disabled",false);
    });

   });

PHP(functions.php内):

function more_post_ajax(){

$offset = $_POST["offset"];
$ppp = $_POST["ppp"];
header("Content-Type: text/html");

$args2 = array(
    'posts_per_page' => $ppp,
    'offset' => $offset,
    'orderby' => 'Rand'
);

$custom2 = new WP_Query($args2);

while ($custom2->have_posts()) : $custom2->the_post(); 
   the_title();
endwhile;

exit;
}

add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax'); 
add_action('wp_ajax_more_post_ajax', 'more_post_ajax');

実行する必要があるのは、テンプレートファイルのコードで機能するので、「ビュー」が順序として選択されているかどうかに基づいて、投稿の読み込みに使用されるクエリのパラメータを変更することです。

Functions.phpのクエリーに追加された引数が正しく機能しないことを除けば、すべて正常に機能します。たとえば、posts_per_page$ppp変数からfunctions.phpの中の数字に変更した場合、それは正しく機能します。しかし、'orderby' => 'Rand'(テスト目的でのみ使用されている)は何もしません。投稿はまだ日付順に読み込まれています。私が試した他のorderbyや他のパラメータは機能しません。関数からクエリを取り出してテンプレートファイルに直接追加すれば、うまくいきます。

Functions.phpのクエリが追加のパラメータを認識しないのはなぜですか?他のパラメータではうまくいかないのに、なぜposts_per_pageoffsetの変更が正しく機能するのでしょうか。

1
Josh Warren

何らかの理由で、それはorderbyパラメータに特有の問題でした。 remove_all_filters('posts_orderby');関数の先頭にmore_post_ajax()を追加することで問題は解決しました。

1
Josh Warren