根据WordPress中的多个类别指定搜索结果

时间:2014-12-05 15:00:43

标签: php mysql wordpress filtering categories

我目前正在使用媒体类别库,这是一个Wordpress插件,允许用户向其媒体添加类别,然后使用前端搜索表单根据这些类别搜索其媒体。

https://wordpress.org/plugins/media-category-library/

经过测试后,我意识到如果您点击其生成的核对清单上的多个类别,它会从这些类别中找到所有媒体,而不是已分配给这些多个类别的媒体。< / p>

举个例子。

  • 媒体1类别=&#34; Cats&#34;
  • 媒体2类别=&#34; Dogs&#34;
  • 媒体3类别=&#34;狗,猫和#34;

如果我勾选了Cats and Dogs,我只希望它找到Media 3,而忽略其他两个。但目前,如果我在复选框列表中勾选出Cats and Dogs,它将返回所有3个媒体。

这两个SQL查询似乎是问题所在,但在尝试了很多不同的事情之后,我找不到解决问题的方法。

        // create sub query, get term_taxonomy


        $sub_sql = "SELECT x.term_taxonomy_id FROM " . $wpdb->term_taxonomy . " AS x " .
                "INNER JOIN " . $wpdb->terms . " AS t ON x.term_id = t.term_id WHERE " .
                "t.slug IN(" . implode( ",", $selected_terms ) . ")";       


        // main query that uses subquery

        $sql = "SELECT SQL_CALC_FOUND_ROWS DISTINCT p.ID, p.post_title, p.post_mime_type, p.post_excerpt, p.post_date FROM " . $wpdb->posts . " AS p " . "LEFT JOIN " . $wpdb->term_relationships . " AS r ON p.ID = r.object_id " .
                "WHERE r.term_taxonomy_id IN($sub_sql) AND p.post_type='attachment'";

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

看起来您想将第一个查询更改为等于。

$sub_sql = "SELECT x.term_taxonomy_id FROM " . $wpdb->term_taxonomy . " AS x " .
        "INNER JOIN " . $wpdb->terms . " AS t ON x.term_id = t.term_id WHERE " .
        "t.slug like '" . implode(",", $selected_terms) . "%'";  

&#34;,&#34;之后有一个空格。在内幕中,因为你的例子有一个空格,如果不需要,只需删除它。

更新了代码。如果您确保这些条款符合特定顺序,则可以使用。排除单打并拉出所有倍数。