Author页面自定义查询WHERE Author[POST META VALUE]OR[POST META VALUE]

时间:2012-10-16 作者:Chris Hayes

我目前正在尝试在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?非常感谢您的帮助!如果您需要澄清,请询问。

2 个回复
最合适的回答,由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; ?>
我希望这对某人有帮助!

SO网友:Rutwick Gangurde

这两个过滤器中的任何一个都可以帮助您:

  1. post_clauses (我建议这一个,更详细一点!)
  2. posts_where
检查法典中的示例。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post