我目前正在尝试在authors页面(author.php)上执行自定义查询。我有两个自定义字段用于我要查询的帖子(post\\u摄影师和post\\u摄像师)。
我试图为作者的个人资料做的是获取当前用户资料的所有帖子,其中用户是:
这篇文章的作者OR 《邮报》摄影师OR 《邮报》的摄像师,所以每个人的简介MAY 有些帖子不是他们写的(他们是摄影师或摄像师)。
下面的代码与我想要的很接近,但问题是它检索当前用户是作者的帖子AND 要么是后期摄影师OR 后期摄像师。它需要位于当前用户是作者的位置OR 后期摄影师OR 后期摄像师。
$args = array(
\'author\' => $posts[0]->post_author,
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'post_photographer\',
\'value\' => $posts[0]->post_author,
\'type\' => \'numeric\'
),
array(
\'key\' => \'post_videographer\',
\'value\' => $posts[0]->post_author,
\'type\' => \'numeric\'
)
)
);
query_posts( $args );
这是否可以通过WordPress查询(query\\u posts或WP\\u query)实现,还是需要编写自定义SQL?非常感谢您的帮助!如果您需要澄清,请询问。
最合适的回答,由SO网友:Chris Hayes 整理而成
对于任何可能有类似需求的人,我通过以下方式解决了这个问题(在authors.php上):
首先,我获取作者ID:
$author = get_user_by( \'slug\', get_query_var( \'author_name\' ) );
// ID is accessed this way:
$author_id = $author->ID;
然后,我创建了一个自定义查询:
$query = "
SELECT p.*
FROM $wpdb->postmeta m
JOIN $wpdb->posts p
ON p.id = m.post_id
WHERE ( m.meta_key = \'medium_post_photographers\'
AND m.meta_value = \'$author->ID\' )
OR ( m.meta_key = \'medium_post_videographers\'
AND m.meta_value = \'$author->ID\' )
AND p.post_status = \'publish\'
UNION DISTINCT
SELECT *
FROM $wpdb->posts p
WHERE post_author = $author->ID
AND p.post_status = \'publish\'
GROUP BY p.id
ORDER BY post_date DESC
";
最后使用以下方法得到结果:
$author_posts = $wpdb->get_results($query, OBJECT);
以下是我的循环的简化版本,用于显示结果:
<?php if ( $author_posts ) : ?>
<?php global $post; ?>
<?php foreach ( $author_posts as $post ) : setup_postdata($post); ?>
<h6><?php echo the_title(); ?></h6>
...
<?php endforeach; ?>
<?php else: ?>
<div class="alert">There are no posts in this category.</div>
<?php endif; ?>
我希望这对某人有帮助!