AJAX加载更多帖子-WP_QUERY参数不起作用

时间:2015-06-04 作者:Josh Warren

我试图用一个Ajax加载更多帖子按钮来代替标准的WP分页。我基本上是按照this question 这在很大程度上很有效。

以下是相关代码:

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\');
我需要做的是根据是否选择“视图”作为顺序来更改用于加载帖子的查询的参数,因为它在模板文件的代码中起作用。

除了在函数中添加到查询中的参数外,其他一切都正常工作。php工作不正常。例如,如果我改变posts_per_page$ppp 变量为函数中的数字。php,这将正常工作。但是\'orderby\' => \'rand\' (仅用于测试目的)没有任何作用,帖子仍然按日期加载。任何其他orderby 或者我尝试过的其他参数不起作用。如果我将查询从函数中取出,并将其直接添加到模板文件中,则效果很好。

为什么查询在函数中。php无法识别其他参数?为什么要改变posts_per_pageoffset 其他参数不能正常工作时?

1 个回复
SO网友:Josh Warren

无论出于何种原因,这是一个特定于orderby 参数正在添加remove_all_filters(\'posts_orderby\');more_post_ajax() 函数解决了问题。

结束

相关推荐

How to remove an Ajax action

有一个插件正在加载ajax操作,如下所示:add_action( \'wp_ajax_nopriv_func_name\', array( &$this, \'func_name\' ) ); add_action( \'wp_ajax_get_func_name\', array( &$this, \'func_name\' ) ); 我想在我的主题中删除它们,因此我正在做:remove_all_actions(\'wp_ajax_nopriv_func_name\')