如何根据对应作者的元值对wp_Query中的帖子进行排序

时间:2014-06-03 作者:SPi

是否可以通过WP_Query 根据相应的post author?

用例:我有高级订阅者和基本订阅者。我希望在搜索结果页面中,高级订阅者的帖子显示在基本订阅者的帖子之前。

解决此问题的一种方法是添加meta_keypost, 指示作者的订阅者状态,但每次该用户的状态更改时,我都必须更新该用户的所有帖子。

有没有办法通过直接引用用户元值来实现这一点?

$args = array(
            \'post_status\' => \'publish\',
            \'post_type\' => \'listing\',
            \'meta_key\' => \'???\', // how can I refer to the meta_key of the author of a post ?
            \'orderby\' => \'???\',
            \'order\' => \'DESC\'
        );

$query = new WP_Query($args);

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

这会给你一个想法,我相信这会帮助你前进。

此查询首先使用WP_User_Query 获取所有注册为高级订阅者和基本订阅者的作者用户。这些用户的订购者meta_value 以便优先显示高级订户。

A.foreach 循环返回每个用户自己的ID,可以将其返回到WP_Query 按以下顺序显示每个用户的帖子meta_value

这是完整的代码。根据需要进行修改

<?php
$args = array(
    \'who\' => \'authors\',
    \'meta_key\' => \'account\',
    \'orderby\' => \'meta_value\',
    \'order\' => \'DESC\',
    \'meta_query\' => array(
        array(
            \'key\' => \'account\',
            \'value\' => array(1, 2),
        )
    )
);

// The WP_User_Query
$user_query = new WP_User_Query( $args );

// User Loop
if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) {
        $user->ID;

        $the_query = new WP_Query( \'author=\' . $user->ID . \'&post_status=publish&post_type=listing\' );
        echo \'<p>\' . $user->display_name . \'</p>\';
        // The Loop
        if ( $the_query->have_posts() ) {
            echo \'<ul>\';
            while ( $the_query->have_posts() ) {
                $the_query->the_post();
                echo \'<li>\' . get_the_title() . \'</li>\';
            }
            echo \'</ul>\';
        } 
        /* Restore original Post Data */
        wp_reset_postdata();
    }
}
?>

SO网友:Matt

如果我理解正确,这就是你要找的:

您需要为每个帖子指定“subscriber\\u status”(这需要是一个自定义元字段)。您还需要为每个作者各自的“subscriber\\u状态”分配一个自定义元字段。

$current_user = wp_get_current_user();

// This represents the custom meta field associated with the user data
$subscriber_status = get_the_author_meta(\'subscriber_status\', $current_user->ID);

// This will query against the custom meta field associated with the post data
$query = new WP_Query([
    \'post_type\'   => \'listing\',
    \'post_status\' => \'publish\',
    \'meta_key\'    => \'subscriber_status\',
    \'meta_value\'  => $subscriber_status,
    \'order_by\'    => \'meta_value\',
    \'order\'       => \'DESC\',
]);
希望这能帮到你。

More on wp_get_current_user()

More on get_the_author_meta()

More on WP_Query

结束

相关推荐

Tab order of post admin page

当我编辑帖子和更新时,我编辑一个文本区域并点击Tab 钥匙,然后Update 按钮将被激活并按下Enter 承认变化。但在另一个环境中,如果我按tab, 然后preview 按钮被激活。为什么会出现这种制表符顺序的差异?哪个选项卡顺序正确?