php - 在 WordPress 中根据多个类别指定搜索结果

标签 php mysql wordpress filtering categories

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

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

经过测试,我意识到,如果您在它生成的 list 上单击多个类别,它将找到这些类别中的所有媒体,而不是已分配给这些多个类别的媒体。

举这个例子。

  • 媒体 1 类别=“猫”
  • 媒体 2 类别=“狗”
  • 媒体 3 类别=“狗、猫”

如果我勾选了猫和狗,我只想让它找到媒体 3,而忽略其他两个。但目前,如果我在复选框列表中勾选猫和狗,它将返回所有 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'";

任何帮助将不胜感激:)

最佳答案

您似乎想将第一个查询更改为 equals。

$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) . "%'";  

内爆中的“,”后面有一个空格,因为您的示例有一个空格,如果不需要,只需将其删除即可。

更新了代码。如果您确保这些术语按特定顺序排列,您可以使用 like。排除单例并拉出所有倍数。

关于php - 在 WordPress 中根据多个类别指定搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27318732/

相关文章:

mysql - 多个子查询的报表查询

mysql - org.springframework.dao.InvalidDataAccessResourceUsageException : could not extract ResultSet;

php - git 中的 Wordpress 数据库

mysql - 为什么我的左连接表现为内连接

MySQL Workbench导出数据并将其导入到具有不同名称的架构中

php - 在本地主机上使用 crontab 的 cronjob 没有结果

php - 我们可以在 php 类中定义很多方法吗?

php - 如何在php中执行带分号的mysql代码?

php - 防止在 ajax 请求上执行整个 php

javascript - 将 PHP 值显示到不刷新的页面