根据用户角色让粘性用户进入用户循环

时间:2016-05-31 作者:Ali

我有这个短代码来显示按注册日期排序的用户头像循环。

function Profiles() {
    $args = array(
    \'orderby\' => \'registered\',
    \'order\' => \'DESC\',
    \'fields\' => \'all_with_meta\',
    );
    $user_query = new WP_User_Query( $args );
    if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) { ?>

    <div class="user-item user-img-<?php echo $user->ID; ?>" rel="<?php echo $user->ID; ?>">
    <a href="<?php echo $website; ?>" rel="<?php echo $user->ID; ?>" target="_blank"><?php echo get_avatar( $user->ID, 100 ); ?></a>    
    </div>
    <?php }
    } else {
        echo \'No users found.\';
    }
}
add_shortcode(\'profiles\', \'Profiles\');
如果任何用户角色更改为sticky (自定义角色),然后用户移动到列表的顶部。对于循环中的所有其他用户,默认orderby应保持为已注册状态。一旦sticky 用户角色被删除,它将返回到正常排序。

我仔细考虑了一下,也许我可以把两个论点结合在一起Wp_User_Query 那可能有用吗?

例如$sticky_argsrole__in => \'sticky\'$simple_args 拥有所有其他roles => \'subscriber\', \'customer\', \'author\'role__not_in => \'sticky\' 论点然后结合这个Wp_User_Query 在某种程度上$user_query->results 显示$sticky_args 首先列出用户,然后$simple_args 然后在循环中列出用户列表。我尝试了几个代码,并试图思考if语句,但到目前为止什么都不起作用。谷歌也没有帮助。非常感谢您的帮助。

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

我通过在每个循环之后添加两个循环来解决这个问题。第一个循环显示用户\'role__in\' => \'sticky\' 而第二个循环显示用户\'role__not_in\' => \'sticky\' 它工作得很好。这是代码,如果它对任何人都有帮助的话。

function Profiles() {

    echo "<div class=\'users-list\'>"

    // First loop with sticky users
    $args = array(
    \'role__in\' => \'sticky\',
    \'orderby\' => \'registered\',
    \'order\' => \'DESC\',
    \'fields\' => \'all_with_meta\',
    );
    $user_query = new WP_User_Query( $args );
    if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) { ?>

    <div class="user sticky-user user-img-<?php echo $user->ID; ?>" rel="<?php echo $user->ID; ?>">
    <a href="<?php echo $website; ?>" rel="<?php echo $user->ID; ?>" target="_blank"><?php echo get_avatar( $user->ID, 100 ); ?></a>    
    </div>
    <?php }
       }

    // Second loop without sticky users
    $args = array(
    \'role__not_in\' => \'sticky\',
    \'orderby\' => \'registered\',
    \'order\' => \'DESC\',
    \'fields\' => \'all_with_meta\',
    );
    $user_query = new WP_User_Query( $args );
    if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) { ?>

    <div class="user user-img-<?php echo $user->ID; ?>" rel="<?php echo $user->ID; ?>">
    <a href="<?php echo $website; ?>" rel="<?php echo $user->ID; ?>" target="_blank"><?php echo get_avatar( $user->ID, 100 ); ?></a>    
    </div>
    <?php }
    } else {
        echo \'No users found.\';
    }

    echo "</div>"
}
add_shortcode(\'profiles\', \'Profiles\');

SO网友:cjbj

如果你read the code (在版本4.5.2的第164-173行)您将看到orderby 可以是一个值数组,与order. 所以你可以修改$args 像这样:

     $args = array(
        \'orderby\' => array(
            array (\'sticky\' => \'DESC\'),
            array (\'registered\' => \'DESC\')),
        \'fields\' => \'all_with_meta\',
        );
请注意,我对woocommerce如何定义粘滞用户角色一无所知,因此我不知道这段代码是否真的有效。它仅显示如何在查询中实现多维数组。

相关推荐

您是否可以使用GET_USERS()返回比当前用户更高角色的用户?

我使用get\\u users()返回具有指定角色的用户列表。这样做的目的是在前端生成一个下拉列表,在评论中提及其他用户,这与https://wordpress.org/plugins/comment-mention/.问题是,如果当前用户处于较低的角色(如作者),则get\\u users()不会返回较高的角色(如管理员)。换句话说,我需要一个较低的用户,以便能够返回具有较高角色的用户。我意识到get\\u users()阻止从此处返回更高角色的用户:get_users / WP_User_Query