是否将自定义角色分配给自定义帖子?

时间:2011-08-09 作者:Rutwick Gangurde

我一直在四处寻找这个,但找不到办法。场景是:我有一个自定义的帖子类型“Company”,我通过插件代码创建公司类型的帖子。创建新公司帖子时,我将作者设置为Admin。现在再往下看代码,我正在创建一个自定义角色“代表”,并再次通过代码将用户分配给该角色。我想做的是,指派一名代表担任公司的作者。但我甚至无法在切换作者的下拉列表中看到此用户(代表)。是否有任何参数需要传递给wp\\u insert\\u user或register\\u post\\u type或add\\u role/add\\u cap以实现此目的?

提前感谢!

3 个回复
最合适的回答,由SO网友:Rutwick Gangurde 整理而成

I\'m reposting this with an example, I really don\'t get the code formatting of this editor, last time I was so irritated with it that I skipped the code!
该下拉列表使用过滤器“wp\\u dropdown\\u users”(user.php,第976行)填充。此筛选器将下拉列表(html select)作为字符串返回。您可以截取此字符串,并添加自己的选项,即具有自定义角色的用户列表。检查select with Firebug,选项值是用户id,文本是该用户的登录名。

<?php 
    add_filter(\'wp_dropdown_users\', \'test\');
    function test($output) 
    {
        global $post;

        //Doing it only for the custom post type
        if($post->post_type == \'my_custom_post\')
        {
            $users = get_users(array(\'role\'=>\'my_custom_role\'));
           //We\'re forming a new select with our values, you can add an option 
           //with value 1, and text as \'admin\' if you want the admin to be listed as well, 
           //optionally you can use a simple string replace trick to insert your options, 
           //if you don\'t want to override the defaults
           $output .= "<select id=\'post_author_override\' name=\'post_author_override\' class=\'\'>";
        foreach($users as $user)
        {
            $output .= "<option value=\'".$user->id."\'>".$user->user_login."</option>";
        }
        $output .= "</select>";
     }
     return $output;
    }
?>
就是这样!您将有一个下拉列表列出您的自定义角色。尝试更改帖子作者,它会得到整洁的更新。这是一个黑客,但它对我有用!

SO网友:Luc

更新以前发布的函数,该函数复制selectbox,而不显示作者姓名。还增加了对多角色的支持:

add_filter(\'wp_dropdown_users\', \'addAuthorsToSelect\');
function addAuthorsToSelect($output)
    {
        global $post;
        if($post->post_type == \'my_custom_post_type\')
        {
            $users = get_users(array(\'role__in\'=>array(\'role1\',\'role2\',\'role3\',\'role4\')));
            $output = "<select id=\'post_author_override\' name=\'post_author_override\' class=\'\'>";
            foreach($users as $user)
            {
                $output .= "<option value=\'".$user->id."\' ".(($post->post_author==$user->id)?\'selected="selected"\':\'\').">".$user->display_name." (".$user->user_login.")</option>";
            }
            $output .= "</select>";
        }
        return $output;
    }

SO网友:Geza Gog

上述解决方案仅适用于WordPress classic编辑器,但自WordPress 5.0以来,Gutenberg无法使用。新的块编辑器使用REST API使用AJAX调用填充author下拉列表。查看控制台上的网络选项卡,您可以看到一个调用/wp-json/wp/v2/users/?who=作者;每页=100(&U)_locale=用于读取作者的用户。

我的工作解决方案是使用rest\\u user\\u查询挂钩修改用户查询参数。

add_filter(\'rest_user_query\', \'add_custom_role_to_authors\', 10, 2);

function add_custom_role_to_authors($prepared_args, $request ) {
    $prepared_args[\'who\'] = array(\'authors\',\'custom_role\');
    return $prepared_args;
}

结束

相关推荐