使用通过AJAX传递给wp_Query的参数多次修改循环

时间:2016-10-02 作者:Zeeshan

我正在尝试为我的网站创建一个后过滤器。

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品牌的输入框时。我要做的是修改查询并重新运行它。此时,我还没有编写在复选框未选中时“取消修改”代码的代码。

1 个回复
最合适的回答,由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部分有很好的解释。

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i