我试图用一个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_page
或offset
其他参数不能正常工作时?