web-dev-qa-db-fra.com

Manière correcte de travailler avec wpdb pour obtenir le prénom de l'utilisateur

Je souhaite utiliser $ wpdb pour obtenir le prénom de l'utilisateur. Je sais comment faire avec php et mysql, mais je veux utiliser $ wpdb.

Le problème est que je ne sais pas comment l'utiliser. J'ai essayé de créer une requête simple pour afficher l'utilisateur fist_name par user_id et que je l'utilise en écho. C'est ce que j'ai fini avec:

$mywpdb1 = $wpdb->get_var( 
    $wpdb->prepare( 
        "SELECT first_name 
        FROM $wpdb->usermeta 
        WHERE user_id = 2", 
        $user->first_name
    ) 
); 
echo $mywpdb1;
2
Max Pekerman

Vous ne devriez pas vraiment utiliser la requête wp ici, utilisez get_user_meta ();

Exemple:

$first_name = get_user_meta(2, 'first_name', true);
3
Paul

Si vous souhaitez effectuer une requête directe dans la base de données pour le champ méta first_name, procédez comme suit:

global $wpdb;

$user_id = 2;
$meta_key = "first_name";

$first_name = $wpdb->get_var( 
    $wpdb->prepare( 
        "SELECT meta_value 
        FROM $wpdb->usermeta 
        WHERE user_id = %d 
        AND meta_key = %s",
        $user_id,
        $meta_key
    ) 
);

echo $first_name;

Mais je pense qu'il est préférable d'utiliser l'objet WP_User, qui contient le champ méta first_name en tant que propriété publique:

// Get the user with ID = 2
$user = new WP_User( 2 );

// Grab de the first_name
$first_name = $user->first_name;

Vous pouvez également utiliser la fonction get_user_meta(), comme suggéré par @PaulH:

$first_name = get_user_meta(2, 'first_name', true);

Mais je pense que l'objet WP_User vaut mieux que get_user_meta() pour ce cas particulier pour les raisons suivantes:

  1. Habituellement, lorsque vous travaillez avec des utilisateurs, vous devez quand même charger l'objet utilisateur. Par exemple, dans la description de question, l'objet utilisateur est déjà chargé. Ainsi , rien d'autre n'est nécessaire , utilisez simplement $user->first_name.
  2. Je ne pense pas qu'il y ait une énorme différence de performance entre les deux méthodes mais en regardant comment fonctionne get_user_meta() ( à la fin, il utilise cette fonction ), il charge tout champs méta utilisateur, même si vous ne voulez qu'un champ. Cela peut avoir de très mauvaises performances que de charger un objet WP_User dans certaines situations.
0
cybmeta