我正在建立一个每小时上传帖子的新闻博客。我创建了一个短代码,在主页上显示最后 15 篇帖子。我的问题是每小时需要删除服务器缓存。所以我决定通过 AJAX 提供帖子,这样这个区域就会在每次页面加载时获得最新的帖子。
我找到了这个answer并将其与我的代码结合起来。
我的问题是它显示所有帖子,而不仅仅是 15 个。
PHP:
function get_ajax_posts() {
// Query Arguments
$args = array(
'post_type' => array('post'),
'post_status' => array('publish'),
'posts_per_page' => 15,
'nopaging' => true,
'order' => 'DESC',
'orderby' => 'date',
);
$ajaxposts = new WP_Query( $args );
$response = '';
if ( $ajaxposts->have_posts() ) {
while ( $ajaxposts->have_posts() ) {
$ajaxposts->the_post();
$response .= get_template_part( 'template-parts/content-archive');
}
} else {
$response .= get_template_part('none');
}
echo $response;
exit; // leave ajax call
}
// Fire AJAX action for both logged in and non-logged in users
add_action('wp_ajax_get_ajax_posts', 'get_ajax_posts');
add_action('wp_ajax_nopriv_get_ajax_posts', 'get_ajax_posts');
JS:
$.ajax({
type: 'POST',
url: '<?php echo admin_url('admin-ajax.php');?>',
dataType: "html",
data: { action : 'get_ajax_posts' },
success: function( response ) {
$( '.home-hot-flights' ).html( response );
//hot-flights
var hot_flights_item = $(".home-hot-flights article").width() + 17;
$(".art-move-left").click(function () {
$('.move-right').addClass('show-move-right');
var leftPos = $('.home-hot-flights').scrollLeft();
$(".home-hot-flights").animate({scrollLeft: leftPos - hot_flights_item}, 200);
});
$(".art-move-right").click(function () {
var leftPos = $('.home-hot-flights').scrollLeft();
$(".home-hot-flights").animate({scrollLeft: leftPos + hot_flights_item}, 200);
});
}
});
最佳答案
这可能对您有帮助:
(nopaging (boolean) – show all posts or use pagination. Default value is ‘false’, use paging. )
Display all posts by disabling pagination:
$query = new WP_Query( array( 'nopaging' => true ) );
如果您想使用 posts_per_page
显示一定数量的帖子,我认为您应该删除该参数。
关于javascript - 通过 AJAX 显示 WordPress 最后的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60170111/