你的第一个问题很奇怪。You seem to be mixing meta_query
parameters 与其他WP_Query
参数。你不能那样做。author
不是的有效组件meta_query
, 两者都不是tag
. 正确的meta_query
, 如果我正确地解释了这一点,甚至不会是一个元查询。您正在处理一个分类法,一个标记,因此您需要tax_query
.
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_tag\',
\'field\' => \'slug\',
\'terms\' => $nametag
)
)
不幸的是,如果您使用作者构建一个完整的查询,您会得到
AND
在税务查询和作者之间,您需要
OR
.
$query = new WP_Query(
array(
\'author\' => 1,
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_tag\',
\'field\' => \'slug\',
\'terms\' => \'depo\'
)
)
)
);
这将为您提供以下查询。
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (57) )
AND (wp_posts.post_author = 1)
AND wp_posts.post_type = \'post\'
AND (wp_posts.post_status = \'publish\')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC LIMIT 0, 5
这不是你的数据,但它是说明性的。
这个AND
就在这里--AND (wp_posts.post_author = 1)
-- 是个问题。你需要这样才能成为OR
. 事实上,你也需要把它放在括号里。。。
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND (
(wp_term_relationships.term_taxonomy_id IN (57))
OR (wp_posts.post_author = 1)
)
AND wp_posts.post_type = \'post\'
AND (wp_posts.post_status = \'publish\')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC LIMIT 0, 5
您必须为
posts_where
为了纠正这一点,但既然您已经在编写自己的SQL,我就不去管它了。我认为您可以使用上面的查询作为参考来完成工作。