WP_DROPDOWN_ROLES()替换选项值=CODE

时间:2014-03-14 作者:LPH

我正在尝试替换插件中角色的硬编码下拉列表。目前代码如下:

echo \'<select name="xf_user_role_\' . $id . \'" id="xf_user_role_\' . $id . \'">\';
?>

<option value=\'subscriber\'
<?php echo ($xf_options[\'xf_user_role\'][$id] == \'subscriber\') ? "selected=\'yes\'" : \'\'; ?> >Subscriber</option>

<option value=\'contributor\'
<?php echo ($xf_options[\'xf_user_role\'][$id] == \'contributor\') ? "selected=\'yes\'" : \'\'; ?> >Contributor</option>

<option value=\'author\'
<?php echo ($xf_options[\'xf_user_role\'][$id] == \'author\') ? "selected=\'yes\'" : \'\'; ?> >Author</option>

<option value=\'editor\'
<?php echo ($xf_options[\'xf_user_role\'][$id] == \'editor\') ? "selected=\'yes\'" : \'\'; ?> >Editor</option>

<option value=\'administrator\'
<?php echo ($xf_options[\'xf_user_role\'][$id] == \'administrator\') ? "selected=\'yes\'" : \'\'; ?> >Administrator</option>

</select> 
此代码更改为:

echo \'<select name="xf_user_role_\' . $id . \'" id="xf_user_role_\' . $id . \'">\';
wp_dropdown_roles( );
?>
</select> 
下拉列表显示,但选择不会提供$xf\\u选项。。。

The wp_dropdown_roles isn\'t well documented in the Codex page. 我尝试了几种不同的方法来将信息添加到()中,但没有做到正确。

()中的正确信息是什么?

1 个回复
SO网友:kaiser

这个wp_dropdown_roles() 函数内部使用get_editable_roles() 获取所需的角色。它只从全局获取角色:

$all_roles = $GLOBALS[\'wp_roles\']->roles;
然后进行过滤:

return apply_filters( \'editable_roles\', $all_roles );
因此,您只需将以下函数添加到插件或functions.php 主题文件:

function wpse137935_filter_editable_roles( Array $roles )
{
    // Don\'t conflict and remove immediately
    remove_filter( current_filter(), __FUNCTION__ );

    // Do any logic in here that appends or removes roles

    return $roles;
}
然后,就在wp_dropdown_roles(), 您添加:

add_filter( \'editable_roles\', \'wpse137935_filter_editable_roles\' );
重要的是,如果其他插件或主题在其他地方调用相同的函数,请尽可能晚地添加过滤器,以免它们崩溃到其他插件或主题中。

结束

相关推荐