我正在尝试为我的网站创建一个后过滤器。
jQuery(document).ready(function($) {
$("input[id=\'brand\']").click(function() {
var key;
var value;
var checked;
var check = $(this).prop("checked");
if (check) {
key = $(this).attr(\'id\');
value = $(this).val();
checked = \'true\';
} else {
checked = \'false\';
}
var ajax_url = \'http://localhost/wordpress/wp-admin/admin-ajax.php\';
var data = {
\'action\': \'filter_posts_by_meta\',
\'checked\': checked,
\'key\': key,
\'value\': value,
};
$.ajax({
method: "POST",
url: ajax_url,
data: data,
success: function(result) {
jQuery(\'#sortid\').html(result);
},
error: function(xhr, status, error) {
// console.log(error);
}
});
});
});
php脚本:
function ajax_filter_posts_by_meta () {
global $wp_query, $wp_the_query;
//$compare= isset($_POST[\'compare\']) ? $_POST[\'compare\'] : \'\';
$key = isset($_POST[\'key\']) ? $_POST[\'key\'] : \'\';
$value = isset($_POST[\'value\']) ? $_POST[\'value\'] : \'\';
$checked = isset ($_POST[\'checked\']) ? $_POST[\'checked\'] : die();
//if ($checked != \'true\'){}
$filterargs= array(array($qv) , array(
array(
\'key\' => $key,
// \'compare\' => $compare,
\'value\' => $value,
),
) ,
);
$wp_query= new Wp_Query($filterargs);
$qv=$wp_query->query_vars;
while(have_posts()) : the_post();
the_title();
wp_reset_postdata();
endwhile;
die();
}
我面临的问题是,查询不断
reset 每次用户单击id品牌的输入框时。我要做的是修改查询并重新运行它。此时,我还没有编写在复选框未选中时“取消修改”代码的代码。
最合适的回答,由SO网友:Tomasz Bakula 整理而成
您可以使用wp_localize_script
将当前查询保存到JS变量。然后,您应该使用ajax发送它,并对其进行修改,然后将其发送回去,以便将来能够访问它。
global $wp_query;
wp_localize_script( \'ajax-pagination\', \'ajaxpagination\', array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'query_vars\' => json_encode( $wp_query->query )
));
This article 应该可以帮助你处理这个问题。尤其是query\\u vars部分有很好的解释。