你的第一个问题很奇怪。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,我就不去管它了。我认为您可以使用上面的查询作为参考来完成工作。