我正在尝试按id显示作者的帖子,或者那些以元值作为作者id的帖子。
我在posts部分有一个自定义字段作为附加作者(additional_author
) 现在我想相应地查询帖子。
目前,我正在使用这些查询参数。
$actual_posts_args = array(
\'posts_per_page\' => 10,
\'author\' => 2,
);
它完美地展示了作者2的帖子。
但当我使用meta_query
对于这个,它忽略了它。
$actual_posts_args = array(
\'posts_per_page\' => 5,
\'author\' => 2,
\'meta_query\' => array(
array(
\'key\' => \'additional_author\',
\'value\' => 2,
\'compare\' => \'LIKE\',
),
),
);
如果我使用remove author参数,它会按以下方式显示帖子
meta_query
完美地
有没有办法同时显示这两个帖子?
SO网友:Buttered_Toast
主要问题是wordpress在创建sql查询时使用的AND逻辑。
此查询将查找同时具有author = 2
和meta query,附加的\\u作者,类似于2。
最好是创建自己的查询以获得此结果。
我创建了一个静态查询供您尝试
global $wpdb;
$sql = \'SELECT *\';
$sql .= " FROM {$wpdb->prefix}posts AS p";
$sql .= " JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id";
$sql .= \' WHERE (p.post_author = 2\';
$sql .= \' OR (pm.meta_key = \\\'additional_author\\\' AND pm.meta_value LIKE \\\'%2%\\\'))\';
$sql .= \' AND p.post_type = \\\'post\\\'\';
$sql .= \' AND p.post_status = \\\'publish\\\'\';
$sql .= \' GROUP BY p.ID\';
$sql .= \' ORDER BY p.post_date DESC\';
$sql .= \' LIMIT 5\';
$results = $wpdb->get_results($sql);
print_r($results);
这几乎是WordPress创建的查询的精确副本,但有一点小小的变化,
OR
而不是
AND
.
这有点资源昂贵,因为OR逻辑将创建两个表进行搜索,但它会完成这项工作。
我们不必使用$wpdb->prepare
因为所有sql都是我们硬编码的,如果您希望此查询是动态的,请告诉我,我会更新答案。