$wpdb帖子类型和术语查询仅在术语slug和title中没有破折号或空格时才有效

时间:2016-12-21 作者:Tyler

我试图查询按帖子类型、分类法类型和术语筛选的帖子,并将它们显示为按发布月份分组的帖子数量。我有一段代码可以很好地做到这一点,只要标题中没有空格,slug中没有破折号。为什么会这样?我尝试使用esc_sql(\'term-slug\'), \'term\\-slug\', 和escape(\'term-slug\') 没有成功。

我的代码:

            $posts_per_month = $wpdb->get_results(
                "SELECT DATE_FORMAT(post_date, \'%Y-%m\') AS month, COUNT(ID) AS count
                            FROM $wpdb->posts AS wposts
                            LEFT JOIN $wpdb->term_relationships AS tax_rel ON (wposts.ID = tax_rel.object_id)
                            LEFT JOIN $wpdb->term_taxonomy AS term_tax ON (tax_rel.term_taxonomy_id = term_tax.term_taxonomy_id)
                            LEFT JOIN $wpdb->terms AS terms ON (terms.term_id = term_tax.term_id)
                    WHERE post_status = \'publish\'" . $post_type_query .
                   "AND terms.name = \'shorelineorwaterway\'
                    AND term_tax.taxonomy = \'cleanup_type\'
                    GROUP BY month",
                OBJECT_K
            );
如果我删除术语标题中的空格和术语slug中的破折号,那么效果会很好。如果我尝试在slug中不使用破折号,在title中不使用空格,则返回一个空数组。类似地,如果我尝试在slug中使用破折号,而标题中没有空格,则不会起作用。

这有什么明显的原因吗?

1 个回复
最合适的回答,由SO网友:CodeMascot 整理而成

在您使用的代码中"AND terms.name = \'shorelineorwaterway\' 我不认为shorelineorwaterway 是你的术语名称,可能是你的术语slug。因此,您可以通过"AND terms.slug = \'shorelineorwaterway\' 在这里,在倒逗号内,可以使用连字符。

如果需要使用术语名称"AND terms.name = \'Your Term Name\' 会有用的。

我已经测试了以上两项。

希望我已经澄清了我的想法。