web-dev-qa-db-ja.com

ユーザーがカスタムメタボックス内を選択する

私は人造のカスタムメタボックスフレームワークを使っています( https://github.com/humanmade/Custom-Meta-Boxes )。自分のWPサイトで複数の役割を持つユーザーから移入されている自分のメタボックスに選択ドロップダウンを追加します。この投稿への参照: get_usersで複数のロールを取得する

私は思いついた:

add_filter( 'cmb_meta_boxes', 'users_metabox' );

function eusers_metabox( array $meta_boxes ) {

    $prefix = 'user_';

    global $wpdb;
    $blog_id = get_current_blog_id();

    $user_query = new WP_User_Query( array(
        'meta_query' => array(
            'relation' => 'OR',
            array(
                'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
                'value' => 'Administrator',
                'compare' => 'like'
              ),
            array(
                'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
                'value' => 'Editor',
                'compare' => 'like'
              )
          )
      ) 
    );

    $fields = array(
    array( 
            'id'   => $prefix . 'user_sub', 
            'name' => 'Subscriber User', 
            'type'     => 'select',
            'use_ajax' => false,
            'options'  => $user_query,  // this is where you populate the select in metabox
        ),
    );

    $meta_boxes[] = array(
        'title' => 'Location Info',
        'pages' => 'em_users',
        'context'    => 'normal',
        'priority'   => 'high',
        'fields' => $fields
    );

    return $meta_boxes; 

}

多少動作しますが、大文字だけを返すようです。何か案は?

(UserID)を変数定数として出力する必要があります

1
Rizzo

問題は、クエリの結果ではなく、WP_User_Queryオブジェクトを渡すことです。変更してみてください。

$fields = array(
array( 
        'id'   => $prefix . 'user_sub', 
        'name' => 'Subscriber User', 
        'type'     => 'select',
        'use_ajax' => false,
        'options'  => $user_query,  // this is where you populate the select in metabox
    ),
);

に:

$users_ids = array();
if ( !empty( $user_query->results )){
    foreach($user_query->results as $user){
        $users_ids[] = $user->ID;
    }
}

$fields = array(
array( 
        'id'   => $prefix . 'user_sub', 
        'name' => 'Subscriber User', 
        'type'     => 'select',
        'use_ajax' => false,
        'options'  => $users_ids,  // this is where you populate the select in metabox
    ),
);
1
cybmeta