Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何先按类别过滤WordPress帖子,然后按属于所选类别帖子的标签过滤?_Php_Ajax_Wordpress - Fatal编程技术网

Php 如何先按类别过滤WordPress帖子,然后按属于所选类别帖子的标签过滤?

Php 如何先按类别过滤WordPress帖子,然后按属于所选类别帖子的标签过滤?,php,ajax,wordpress,Php,Ajax,Wordpress,这是我在这里的第一篇文章,我也是一个初学者,所以请容忍我 我想完成的是创建一个AJAX函数,它将以复选框的形式列出所有可用的类别,用户可以从中选择。选择并点击“应用”后,我想显示分配给所选类别的帖子中所有标签的列表(也以复选框的形式)。然后用户可以从可用的标签中选择,然后点击最后的“应用”按钮,相应的帖子就会显示出来 类似于TED.com的“你感兴趣的是什么?”但是在AJAX中。所以第一步是分类,第二步是标签。然后,将显示属于选定类别且已指定选定标记的帖子 到目前为止,我知道如何列出所有可用的类

这是我在这里的第一篇文章,我也是一个初学者,所以请容忍我

我想完成的是创建一个AJAX函数,它将以复选框的形式列出所有可用的类别,用户可以从中选择。选择并点击“应用”后,我想显示分配给所选类别的帖子中所有标签的列表(也以复选框的形式)。然后用户可以从可用的标签中选择,然后点击最后的“应用”按钮,相应的帖子就会显示出来

类似于TED.com的“你感兴趣的是什么?”但是在AJAX中。所以第一步是分类,第二步是标签。然后,将显示属于选定类别且已指定选定标记的帖子

到目前为止,我知道如何列出所有可用的类别,但当按标签过滤时,它会给我一个所有标签的列表,而不仅仅是所选类别的标签。然后实际结果(帖子)也会被复制。不幸的是,我无法理解如何按标签过滤并删除重复。在使用block builder时,我将函数放入了短代码中,这样我就可以将短代码粘贴到代码模块中,并将其放置在页面的任何位置

我的职能:

编辑:(现在更新了Vitauts的答案+添加了删除重复结果的代码)

另一方面——理想情况下,我希望删除“应用”按钮,而是让数据通过AJAX自动显示。换句话说:选择一个类别并立即显示所有标签,然后选择一个标签并立即显示所有帖子


任何帮助都将不胜感激,并感谢您抽出时间

您需要对代码进行一些更改。首先,标签列表表单需要重新提交
cFilter
值,因此在
show\u filter\u results()

foreach ($_POST['cFilter'] as $cfilter) {
    $o .= '<input type="hidden" name="cFilter[]" value="' .  esc_attr($cfilter) . '">';
}

您需要对代码进行一些更改。首先,标签列表表单需要重新提交
cFilter
值,因此在
show\u filter\u results()

foreach ($_POST['cFilter'] as $cfilter) {
    $o .= '<input type="hidden" name="cFilter[]" value="' .  esc_attr($cfilter) . '">';
}

谢谢你,你的改变很有效。我已经用你的答案更新了代码,还有一些其他的改进,比如删除了重复的结果和更好的变量命名。现在,下一步是删除按钮,并在选中复选框时加载AJAX结果。谢谢-您所做的更改正常工作。我已经用你的答案更新了代码,还有一些其他的改进,比如删除了重复的结果和更好的变量命名。现在,下一步是删除按钮,并在选中复选框时显示AJAX加载结果。
foreach ($_POST['cFilter'] as $cfilter) {
    $o .= '<input type="hidden" name="cFilter[]" value="' .  esc_attr($cfilter) . '">';
}
$args2['tax_query'] = array(
    'relation' => 'AND',
    array(
        'taxonomy' => 'category',
        'field' => 'id',
        'terms' => $_POST['cFilter'],
        'include_children' => false
    ),
    array(
        'taxonomy' => 'post_tag',
        'field' => 'id',
        'terms' => $_POST['tFilter'],
    )
);