从Meta Value列出用户的快捷代码?

时间:2019-05-10 作者:Michael

尝试使用带参数的短代码显示符合特定条件的用户列表。这是我到目前为止所拥有的,但出于某种原因,它没有显示任何内容。我对这方面很陌生,所以如果有人有变化的例子,那将非常有帮助。提前谢谢。

/**
 * Shortcode for Listing Users from Meta Data
 * Usage: [list_users key="green-eyes" value="Yes" userrole="x-genes,y-genes"]
 */
function users_from_meta($atts) {
    $atts = shortcode_atts( array(
        \'key\'   => \'\',
        \'value\' => \'\',
        \'userrole\'  => \'\',
    ), $atts );
    $user_query = new WP_User_Query( array( 
        \'meta_key\' => $atts[\'key\'],
        \'meta_value\' => $atts[\'value\'],
        \'role__in\'    => wp_parse_list( $atts[\'userrole\'] ),
    ) );
    $users = $user_query->get_results();
    if (!empty($users)) {
        $results = \'<ul>\';
        foreach ($users as $user){
            $results = \'<li>\' . $user->display_name . \'</li>\';
        }
        $results =  \'</ul>\';
    } else {
        $results =  \'No users found\';
    }
    wp_reset_postdata();
    return $results;
}
add_shortcode( \'list_users\', \'users_from_meta\' );

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

It\'s a small coding mistake..

它不显示任何内容,因为当有结果时,最终输出总是</ul> 因为您总是覆盖$results 并且不向变量追加输出:

$results = \'<ul>\';
foreach ($users as $user){
    $results = \'<li>\' . $user->display_name . \'</li>\';
}
$results = \'</ul>\';
因此,正确的代码是:

$results = \'<ul>\';
foreach ($users as $user){
    $results .= \'<li>\' . $user->display_name . \'</li>\';
}
$results .= \'</ul>\';
没有必要打电话wp_reset_postdata() 因为在您的代码中,没有调用任何修改全局$post 对象/数据。