我目前正在使用媒体类别库,这是一个Wordpress插件,允许用户向其媒体添加类别,然后使用前端搜索表单根据这些类别搜索其媒体。
https://wordpress.org/plugins/media-category-library/
经过测试后,我意识到如果您点击其生成的核对清单上的多个类别,它会从这些类别中找到所有媒体,而不是已分配给这些多个类别的媒体。< / p>
举个例子。
如果我勾选了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'";
非常感谢任何帮助:)
答案 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;之后有一个空格。在内幕中,因为你的例子有一个空格,如果不需要,只需删除它。
更新了代码。如果您确保这些条款符合特定顺序,则可以使用。排除单打并拉出所有倍数。