显示带有短码的随机用户

时间:2013-12-19 作者:NW Tech

我正在尝试设置一个快捷码,以便在每次刷新页面时显示一个随机用户。我成功地展示了all 用户或通过用户ID选择用户。

以下是我现在的短代码:

//* Shortcode for getting users
function list_of_users( $atts ) {

    extract( shortcode_atts(
        array(
            \'display\' => \'all\',
            \'user\' => \'30\'
        ),
        $atts
    ));

    switch ( $display ) {
        case \'all\':
            $content = display_all_users();
            break;
        case \'single\':
            $content = display_single_user( (int) $user );
            break;
        case \'rotate\':
            $content = display_rotate_users();
            break;
        default:
        break;
    }
    return $content;
}
add_shortcode(\'staff\', \'list_of_users\');
以下是要显示的功能all 用户:

function display_all_users(){ 
    $args = array(
        \'orderby\' => \'ID\',
        \'order\' => \'ASC\'
    );
    $users = get_users( $args );

    $html = \'<ul class="staff">\';
        foreach( $users as $user ){ 
            $user_info = get_userdata($user->ID);
            $html .= \'<li>\';
            $html .= \'<a href="\'.get_home_url().\'/author/\'.$user_info->user_nicename.\'" class="staff-image">\';
            $html .= mt_profile_img( $user->ID, array(\'size\' => \'250x250\',\'echo\' => false));
            $html .= \'</a>\';
            $html .= \'<div class="staff-info"><a href="\'.get_home_url().\'/author/\'.$user_info->user_nicename.\'" class="staff-name"><h2>\'.$user->display_name.\'</h2></a>\';
            $html .= \'<div class="service-certs">\';
            $html .= get_field(\'certifications\',\'user_\'.$user->ID);
            $html .= \'</div>\';
            $html .= \'<p class="service-excerpt">\';
            $html .= get_field(\'short_bio\',\'user_\'.$user->ID);
            $html .= \'</p>\';
            $html .= \'<a href="\'.get_home_url().\'/author/\'.$user_info->user_nicename.\'" class="more-staff-bio">Read more from \' . $user_info->user_firstname . \'</a></div><div style="clear: both;"></div>\';
            $html .= \'</li>\';
        }
    $html .= \'</ul>\';
    return $html;
}
以下是按ID显示单个用户的函数:

function display_single_user( $user_id = 30 ){

    $html = \'<div class="home-profile-image">\';
    $html .=  mt_profile_img( $user_id, array(\'size\' => \'175x175\',\'echo\' => false));
    $html .= \'</div><div class="home-short-bio">\';
    $html .=  get_field(\'short_bio\',\'user_\'.$user_id);
    $html .= \'</div><a href="\'.get_home_url().\'/our-team/" class="button">Read more staff bios</a>\';

    return $html;
}
我陷入困境的地方是获取所有用户的列表,然后随机化用户id以显示特定信息。我想为这个随机用户保留单个用户(上面)的输出。。。这只是一个如何获得随机ID的问题。

关于如何做到这一点,有什么建议吗?

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

默认情况下,WordPress只允许订单ASC和DESC。但是,您可以使用WP_User_Query 以及行动pre_user_query 按需要调整查询(通过引用传递)。

这很有效,因为您只获得一个用户,而不是所有用户。

function my_user_by_rand( $ua ) {
  // remove the action to run only once
  remove_action(\'pre_user_query\', \'my_user_rand\');
  // adjust the query to use random order
  $ua->query_orderby = str_replace( \'user_login ASC\', \'RAND()\', $ua->query_orderby );
}

function display_random_user(){
  // add the filter
  add_action(\'pre_user_query\', \'my_user_by_rand\');
  // setup the query
  $args = array(
    \'orderby\' => \'user_login\', \'order\' => \'ASC\', \'number\' => 1
  );
  $user_query = new WP_User_Query( $args );
  // run the query
  $user_query->query();
  // get the result
  $random = ! empty($user_query->results) ? array_pop($user_query->results) : FALSE;
  // just for debug
  print_r($random);
}

SO网友:GhostToast

像这样的东西会让你成为一个随机用户。未测试。

function display_random_user(){ 
    $users = get_users();
    $user_info = get_userdata($users[array_rand($users)]->ID);
    // do stuff with info
}

PHP: array_rand - Manual

结束

相关推荐

wp_users user_status field

我已经找到了我问题的答案here 但它已经7岁了。我只是想知道我是否可以把这个专栏用于我自己的目的。我计划使用user_activation_key 列中存储哈希键,并在user_status 柱此标志将阻止用户在验证其电子邮件地址之前登录。