获取具有特定元数据的用户,然后查询他们的帖子?

时间:2021-09-14 作者:robert0

基本上,我想做的是首先让用户使用特定的meta\\u键和meta\\u值。

然后查询他们的帖子。

现在我用的是:

        <?php 

$user_ids = get_users([
    \'meta_key\' => \'userfunds\',
    \'meta_value\' => \'10\', 
    \'fields\' => \'ID\',
]);

$posts = new WP_Query([
    \'post_type\' => \'post\',
    \'author__in\' => $user_ids,
    \'orderby\'               => \'rand\'
]);



if( $posts ): ?>
    
        
        
<?php foreach( $posts as $post ): 
        
setup_postdata( $post )
        
?>

<?php the_title(); ?>


<?php endforeach; ?>
    
<?php wp_reset_postdata(); ?>

<?php endif; ?> 
但是get_users 角色没有任何作用。

我是说,我可以输入任何不存在的meta_keymeta_value 它仍然显示所有用户帖子。

所以我想我在代码的某个地方犯了一个错误。

基本上,它忽略了$user\\u ids变量。

这个WP_Query 这就是工作。

任何帮助都将不胜感激。

谢谢

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

请注意,此处:$posts = new WP_Query, 这个$posts 不是一个帖子数组,而是一个对象。因此,与其做foreachsetup_postdata(), 你应该使用while ( $posts->have_posts() ) ... 方法来显示循环。但我猜你最初用的是$posts = get_posts() 那里

我是说,我可以输入任何不存在的meta_keymeta_value 它仍然显示所有用户帖子。

所以我想我在代码的某个地方犯了一个错误。

不,你没有,问题是get_users().

只是当您使用一个不存在的元键/值时,这意味着get_users() 将返回一个空数组,然后将其传递给WP_Query 通过author__in 参数,当它是空数组时WP_Query 不会将查询仅限于某些帖子作者,因此\'author__in\' => array() 实际上与设置该参数相同,因此,未设置该参数时得到的结果与设置为空数组时得到的结果相同。

因此,您要做的是运行new WP_Query 仅当$user_ids 不是空的,如下所示:

if ( ! empty( $user_ids ) ) {
    $query = new WP_Query([
        \'author__in\' => $user_ids,
        // ... your other args.
    ]);

    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            the_title( \'<h3>\', \'</h3>\' );
        }

        wp_reset_postdata();
    }
}