私はこれを見回していました、しかし方法を見つけることができませんでした。シナリオは次のとおりです。私はカスタム投稿タイプ 'Company'を持っています、そして私は自分のプラグインのコードを通して会社タイプ投稿を作成しています。会社の新しい投稿を作成するときは、作成者をAdminに設定します。今度はコードの下に、カスタムロール 'Representative'を作成し、コードを介してこのロールにユーザーを再度割り当てます。私がやりたいことは、代表として会社投稿に著者を割り当てることです。しかし、著者を切り替えるためのドロップダウンリストにこのユーザー(担当者)も表示されません。これを達成するためにwp_insert_user、register_post_type、またはadd_role/add_capに渡す必要がある引数はありますか?
前もって感謝します!
私は例を使ってこれを再投稿しています。このエディタのコードフォーマットがわからないのですが、前回イライラしてコードをスキップしました!
そのドロップダウンはフィルタ '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;
}
?>
それでおしまい!カスタムロールをリストしたドロップダウンがあります。投稿者を変更してみてください、それはきれいに更新されます。それはハックです、しかしそれは私のために働きました!
選択ボックスを複製し、著者名を表示しない、以前に投稿された機能の更新。マルチロールのサポートも追加されました。
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;
}