同时使用作者ID和元查询的WP查询

时间:2021-08-15 作者:Rameez Iqbal

我正在尝试按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 完美地

有没有办法同时显示这两个帖子?

1 个回复
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都是我们硬编码的,如果您希望此查询是动态的,请告诉我,我会更新答案。

相关推荐

在使用_Author挂钩时,如何确定生成对`the_Author()`的每次调用的PHP文件?

the_author() filter hook 可用于修改的输出the_author(). 使用钩子时,是否可以知道哪个PHP文件生成对the_author()?例如,假设我将此自定义函数附加到the_author() 过滤器挂钩,用于修改the_author() 输出:add_filter(\"the_author\", \"change_author\"); function change_author($author) { $author = \"NEW AUTHOR!\