我正在尝试设置一个快捷码,以便在每次刷新页面时显示一个随机用户。我成功地展示了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的问题。
关于如何做到这一点,有什么建议吗?
最合适的回答,由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);
}