问题似乎出在处理ajax reguest的php函数中执行的检查中。
第一个if
条件检查,如果两者categoryfilter1
和categoryfilter2
属性设置为$_POST
, 然后你有else
.
您的代码永远不会输入其他内容,因为根据我的了解,在给定的时间内,您将始终至少设置一个categoryfilter。
我建议使用以下方法if
条件
if ((isset($_POST[\'categoryfilter1\']) && !empty($_POST[\'categoryfilter1\'])) && (isset($_POST[\'categoryfilter2\']) && !empty($_POST[\'categoryfilter2\']))) {
// both properties are set and have value (not empty)
} elseif ((isset($_POST[\'categoryfilter1\']) && !empty($_POST[\'categoryfilter1\'])) && (!isset($_POST[\'categoryfilter2\']) || empty($_POST[\'categoryfilter2\']))) {
// only categoryfilter1 is set and has value and categoryfilter2 is either not set or set but has no value
} elseif ((!isset($_POST[\'categoryfilter1\']) || empty($_POST[\'categoryfilter1\'])) && (isset($_POST[\'categoryfilter2\']) && !empty($_POST[\'categoryfilter2\']))) {
// only categoryfilter2 is set and has value and categoryfilter1 is either not set or set but has no value
}
这种检查应该能处理所有可能的结果
编辑
要查看$\\u POST的内容,可以使用PHPerror_log
, 我在开发中一直使用它,它有助于显示通常无法输出到屏幕上的内容。
当使用过滤器或ajax请求时,这会有所帮助,因为这是发生在后端的进程。
error_log(print_r($_POST, true), 3, __DIR__ . \'/log.txt\');
error_log("\\r\\n\\r\\n", 3, __DIR__ . \'/log.txt\');
此代码将创建一个名为log的新文件。txt,并将包含$\\u POST的内容。
如果ajax代码位于函数中。php,日志。txt文件将与函数位于同一目录中。php。
完成删除文件后,如果无法删除,请删除其中的所有内容。
查看日志后编辑
条件可以更简单查看$\\u POST的内容,请尝试以下操作
if (isset($_POST[\'categoryfilter1\']) && isset($_POST[\'categoryfilter2\'])) {
// both are set
} elseif (isset($_POST[\'categoryfilter1\']) && !isset($_POST[\'categoryfilter2\'])) {
// only categoryfilter1 is set
} elseif (!isset($_POST[\'categoryfilter1\']) && isset($_POST[\'categoryfilter2\'])) {
// only categoryfilter2 is set
}
还有
刚刚注意到,对于单个tax\\u查询,您使用
$args[\'tax_query\'] = array(
\'taxonomy\' => \'group\',
\'field\' => \'id\',
\'terms\' => $_POST[\'categoryfilter1\']
);
这是不正确的,应该是这样的
$args[\'tax_query\'] = array(
array(
\'taxonomy\' => \'group\',
\'field\' => \'id\',
\'terms\' => $_POST[\'categoryfilter1\']
)
);
tax\\u查询需要一个数组,在该数组中,您需要将每个分类法作为自己的数组传递