web-dev-qa-db-fra.com

Utilisateurs sélectionner dans metabox personnalisé

J'utilise le framework de boîtes à méta personnalisé de human made ( https://github.com/humanmade/Custom-Meta-Boxes ). Je souhaite ajouter une liste déroulante de sélection dans ma métabox, qui est renseignée par les utilisateurs dotés de plusieurs rôles sur mon site WP. Référencement de cet article: Obtenez plusieurs rôles avec get_users

Je suis venu avec:

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; 

}

Fonctionne un peu, mais semble ne renvoyer que des lettres majuscules. Des idées?

Besoin de générer (ID utilisateur) comme constante variable

1
Rizzo

Je pense que le problème est que vous passez l'objet WP_User_Query, pas les résultats de la requête. Essayer de changer:

$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