web-dev-qa-db-ja.com

カスタム投稿にカスタムロールを割り当てますか?

私はこれを見回していました、しかし方法を見つけることができませんでした。シナリオは次のとおりです。私はカスタム投稿タイプ 'Company'を持っています、そして私は自分のプラグインのコードを通して会社タイプ投稿を作成しています。会社の新しい投稿を作成するときは、作成者をAdminに設定します。今度はコードの下に、カスタムロール 'Representative'を作成し、コードを介してこのロールにユーザーを再度割り当てます。私がやりたいことは、代表として会社投稿に著者を割り当てることです。しかし、著者を切り替えるためのドロップダウンリストにこのユーザー(担当者)も表示されません。これを達成するためにwp_insert_user、register_post_type、またはadd_role/add_capに渡す必要がある引数はありますか?

前もって感謝します!

5

私は例を使ってこれを再投稿しています。このエディタのコードフォーマットがわからないのですが、前回イライラしてコードをスキップしました!
そのドロップダウンはフィルタ 'wp_dropdown_users'(user.php、行976)を使って生成されます。このフィルタはドロップダウン(html select)を文字列として返します。この文字列を傍受して独自のオプションを追加できます。これはカスタムロールを持つユーザーのリストです。 Firebugでselectを調べてください。オプションの値はユーザID、textはそのユーザのログイン名です。

<?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;
    }
?>

それでおしまい!カスタムロールをリストしたドロップダウンがあります。投稿者を変更してみてください、それはきれいに更新されます。それはハックです、しかしそれは私のために働きました!

4

選択ボックスを複製し、著者名を表示しない、以前に投稿された機能の更新。マルチロールのサポートも追加されました。

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;
    }
2
Luc