web-dev-qa-db-ja.com

投稿者選択ボックスにカスタムロールを表示していないユーザー

私は新しいユーザロールを作成し、いくつかのデフォルトを削除するための関数を使っています。しかし、投稿作家ボックスには表示されません。管理者として選択されているため、管理者のみが表示されます。カスタムロールを持つユーザーは表示されません。なぜこれが起こっているのでしょうか?

これが私の機能です:

// Add New User Roles
function add_new_roles() {

    // New Roles To Be Added
    $new_roles = array(
        array(
            'role'      => 'senior_pastor',
            'display'   => 'Senior Pastor'
        ),
        array(
            'role'      => 'exec_pastor',
            'display'   => 'Executive Pastor'
        ),
        array(
            'role'      => 'assoc_pastor',
            'display'   => 'Associate Pastor'
        ),
        array(
            'role'      => 'elder',
            'display'   => 'Elder'
        ),
        array(
            'role'      => 'ministry_leader',
            'display'   => 'Ministry Leader'
        )
    );

    foreach($new_roles as $role){
        add_role($role['role'], $role['display'], array(
            'edit_published_posts' => true,
            'upload_files' => true,
            'create_product' => true,
            'publish_posts' => true,
            'delete_published_posts' => true,
            'edit_posts' => true,
            'delete_posts' => true,
            'read' => true
        ));
    }

    // Old Roles To Be Removed
    $old_roles = array(
        'subscriber',
        'contributor',
        'author'
        'editor'
    );

    foreach($old_roles as $role){
        remove_role( $role );
    }
}
add_action('after_switch_theme', 'add_new_roles');
5
souporserious

下記の回避策を見つけました。私はそれがWordpressのコアのバグと関係があると思います。これは投稿内のすべてのユーザーをリストしますので、注意が必要です。

// Filter to fix the Post Author Dropdown
function author_override( $output ) {
    global $post, $user_ID;

    // return if this isn't the theme author override dropdown
    if (!preg_match('/post_author_override/', $output)) return $output;

    // return if we've already replaced the list (end recursion)
    if (preg_match ('/post_author_override_replaced/', $output)) return $output;

    // replacement call to wp_dropdown_users
      $output = wp_dropdown_users(array(
        'echo' => 0,
        'name' => 'post_author_override_replaced',
        'selected' => empty($post->ID) ? $user_ID : $post->post_author,
        'include_selected' => true
      ));

      // put the original name back
      $output = preg_replace('/post_author_override_replaced/', 'post_author_override', $output);

    return $output;
}
add_filter('wp_dropdown_users', 'author_override');

クレジットは ここ に行く

6
souporserious

はい、確かに、チケット #16841 で報告されているように、それはバグです。

3.6-beta3でテストしてもまだ問題はありません。回避策は scribuの言葉の中です

[...]にaを追加level_1自分の役割に制限する

これはPITAです。ユーザーレベルがこれまでずっと廃止されてきた方法を考えると、でもそこに行きます。

そして...それは宣伝どおりに動作します;)


参考までに、これらはコアでwp_dropdown_usersが発生する場所です。

export, post list table, meta-boxes, users

3
brasofilo