您看到从admin-ajax.php有可能是'0'响应,因为你还没有注册的AJAX行动挂钩为此功能。
要正确注册您的AJAX呼叫功能,您需要使用操作挂钩wp_ajax_*来实现admin和wp_ajax_nopriv_*可用的功能,以使其在前端可用。
在您的JavaScript中,AJAX调用未正确设置 - done()和success()在jQuery 1.8中已弃用。您应该使用“完成”,“成功”和“错误”回调。
使用POST是在WordPress中处理AJAX请求的推荐方式。由于这是一项独特的要求,因此没有理由致电wp_reset_query()。
从个人偏好我会返回JSON,而不是只使用the_*功能倾销值。在表单值中检查isset()并不是一个坏主意,以确保您没有任何未定义的索引错误。也正因为我有点强迫症,它应该是 “垂直”,而不是 “verticle” :)
PHP
function CaseStudiesAjaxFunction() {
global $post;
$vertical = isset($_GET["vertical"])? $_GET["vertical"] : '';
$product = isset($_GET["product"])? $_GET["product"] : '';
$source = isset($_GET["source"])? $_GET["source"] : '';
$args = array(
'posts_per_page' => '12',
'tag' => array($verticle, $product, $source)
);
$query = new WP_Query($args);
if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
the_post_thumbnail();
the_title();
endwhile; endif;
die();
}
// Add the ajax hooks for admin
add_action('wp_ajax_CaseStudiesAjaxFunction', 'CaseStudiesAjaxFunction');
// Add the ajax hooks for front end
add_action('wp_ajax_nopriv_CaseStudiesAjaxFunction', 'CaseStudiesAjaxFunction');
JAVASCRIPT
function filterCaseStudies(){
var data = $('#case-studies-form').serialize();
$.ajax({
type: 'GET',
url: case_studies_ajax_script.ajaxurl,
dataType: 'text',
data: data + "&action=CaseStudiesAjaxFunction",
complete: function(xhr, status){
console.log("Request complete: " + status);
},
error: function(xhr, status, errorThrown){
console.log("Request failed: " + status);
},
success: function(data, status, xhr){
console.log("Request success: " + data);
// change the html
$('.case-studies-container').html(data);
}
});
}