我正在使用以下内容发出ajax请求,而不是仅返回与特定类别相关的内容,而是返回所有可用的帖子**(在归档/类别页面上运行此更多负载)。我应该在此特定类别页面上加载id为“3”的类别。
非常感谢任何提示或技巧
$('#load-more').click(function (e) {
e.preventDefault();
var pageCount = $(this).attr('data-page');
var nextPage = parseInt($(this).attr('data-page')) + 1;
var catID = $(this).attr('data-cat');
console.log(catID);
if ($(this).hasClass('shake')) {
(this).removeClass('shake');
}
$.ajax({
dataType: 'JSON',
url: ajaxurl,
data: {
'action': 'more_posts',
'pageCount': pageCount,
'cat': catID,
},
success: function (data) {
console.log(data);
console.log(data.message);
if (data.message === "nomore") {
console.log('none');
} else {
$('#appended-content').append(data.message);
}
},
complete: function (data) {
$('#load-more').attr('data-page', nextPage);
console.log(data);
console.log(data.message);
}
});
});
如果我手动将它设置为3就可以了,所以如果我不得不假设,我没有纠正在'args'中正确获取和/或设置id
add_action('wp_ajax_more_posts', __NAMESPACE__ . '\\ajax_more_posts');
add_action('wp_ajax_nopriv_more_posts', __NAMESPACE__ . '\\ajax_more_posts');
function ajax_more_posts()
{
$cat_id = $_POST['cat']; //not sure if this is actually getting the category
$paged = $_REQUEST['pageCount'];
$cat = $_REQUEST['dataCat'];
ob_start();
$args = [
'cat' => $cat_id, //if I set to 3 manually it works
'posts_per_page' => 4,
'post_status' => 'publish'
];
if ($paged != "") {
$args['paged'] = $paged;
}
// if($cat != ""){
// $args['cat'] = $cat;
// }
$moreBlogPosts = new WP_Query($args);
$html = '';
if ($moreBlogPosts->have_posts()) {
while ($moreBlogPosts->have_posts()) : $moreBlogPosts->the_post();
$id = get_the_ID();
$cats = get_the_category($id);
echo '<div class="post-preview">';
include(locate_template('partials/posts/preview-components/preview-block.php', false, false));
get_template_part('partials/posts/preview-components/shopstyle-carousel');
echo '</div>';
endwhile;
} else {
echo "nomore";
}
wp_reset_query();
wp_reset_postdata();
$message = ob_get_clean();
echo json_encode(['message' => $message]);
die();
}
答案 0 :(得分:2)
如果在这种情况下可以使用$ .post而不是$ .ajax,那将会很好。
var data={
'action': 'more_posts',
'pageCount': pageCount,
'cat': catID,
}
$.post(ajaxurl, data,function(res){
var json_obj = JSON.parse(res);
$('#appended-content').append(json_obj.message);
//your code here
});
希望它有所帮助。
答案 1 :(得分:0)
您尚未在Ajax调用中指定该方法。
$.ajax({
dataType: 'JSON',
url: targetUrl,
success: function(data){
},
complete: function (data) {
}
});
因此,默认情况下,请求以GET方式发送。这就是背后的原因。
有两种方法可以解决这个问题。
方法1:在Ajax调用中添加方法
$.ajax({
dataType: 'JSON',
url: targetUrl,
method: 'POST',
success: function(data){
},
complete: function (data) {
}
});
方法2:更改服务器端脚本以接受GET请求(您可以使用$ _GET或$ _REQUEST)
示例:$ _REQUEST ['cat']或$ _GET ['cat']