Maîtriser les métadonnées WordPress interroger les publications et les utilisateurs par métadonnées

Jusqu'à présent dans cette série, vous avez appris à accéder aux métadonnées WordPress et à utiliser les tableaux dans lesquels elles sont renvoyées. Nous ne faisons pas qu'ajouter des champs personnalisés aux publications WordPress pour pouvoir afficher ces informations, mais également pour les trier..

Maintenant que vous savez comment récupérer et afficher les métadonnées, il est temps d'apprendre à personnaliser la boucle WordPress pour ne renvoyer que les publications contenant des méta-valeurs spécifiques..

Utilisation de WP_Query pour interroger par valeur de champ méta

Afin de personnaliser les publications renvoyées par WordPress en fonction des champs méta, nous devons utiliser WP_Query et spécifier un meta_query. Si, par exemple, nous avions un type de message personnalisé appelé "films" comportant un champ personnalisé appelé "réalisateur", nous pourrions interroger les films dont le réalisateur était le réalisateur de l'un des trois Guerres des étoiles des films.

Regardez le code ci-dessous et voyez si vous pouvez utiliser votre maîtrise des tableaux que vous avez acquis dans la dernière partie pour comprendre ce qui se passe avec le meta_query, que je vais décomposer ce qui se passe sous le code.

 $ sw_args = array ('post_type' => 'films', 'meta_query' => array (array ('key' => 'director', 'value' => array ('George Lucas', 'Richard Marquand', Irvin Kershner '),' compare '=>' IN ',))); $ query = new WP_Query ($ sw_args); if ($ the_query-> have_posts ()) echo '

Films par réalisateurs

'; écho '
    '; while ($ the_query-> have_posts ()) $ the_query-> the_post (); écho '
  • '. get_the_title (). '
  • '; écho '
'; / * Restaure les données de post d'origine * / wp_reset_postdata ();

Comme vous pouvez le constater, nous avons un tableau de noms de réalisateurs niché dans trois autres tableaux. Démontons-le, morceau par morceau.

Tout d'abord, nous commençons un tableau pour notre WP_Query args. Après notre premier argument 'post_type', nous commençons un tableau pour héberger notre meta_query arguments.

À l'intérieur de cela, nous spécifions la clé à rechercher - dans le cas "directeur". Nous fournissons également un tableau de valeurs à rechercher dans cette clé.

Le dernier argument est de savoir comment comparer ces valeurs. Dans ce cas, nous spécifions "IN" pour récupérer toutes les publications avec ces valeurs dans le directeur de clé..

Autres comparaisons

Et si nous voulions des films qui ont été réalisés par le réalisateur d'un film de Star Wars, mais ne voulions pas exclure les films Star Wars Prequels? Nous pouvons simplement ajouter un autre tableau d’arguments à notre meta_query, mais cette fois pour la valeur utiliser un tableau de ces titres de films pour la clé titre de film et pour comparer, utilisez 'NOT LIKE' pour exclure les publications qui ont ces valeurs dans le titre de film champ.

 $ sw_args = array ('post_type' => 'films', 'meta_query' => array (array ('key' => 'director', 'value' => array ('George Lucas', 'Richard Marquand', Irvin Kershner '),' compare '=>' IN ',), array (' key '=>' film_title ',' value '=>' Phantom Menace ',' Attaque des clones ',' Revenge of the Sith ' ), 'compare' => 'NOT LIKE'),)); $ query = new WP_Query ($ sw_args);

Désormais, WordPress recherchera les films de ces trois réalisateurs, dont le titre n’est pas l’un des trois précédents..

Affichage des champs méta dans WP_Query

Jusqu'à présent, je vous ai montré comment utiliser WP_Query pour trouver des publications qui ont des valeurs spécifiques pour un champ personnalisé, mais pas comment afficher ces champs.

Afficher ces champs est à peu près la même chose qu'auparavant, mais au lieu d'utiliser get_the_ID () spécifier un identifiant pour get_post_meta () nous le spécifions dans un contexte d'objet. Donc, dans notre boucle, que vous pouvez voir ci-dessous, l'ID est récupéré un peu différemment en utilisant $ query-> post-> ID.

 $ sw_args = array ('post_type' => 'films', 'meta_query' => array (array ('key' => 'director', 'value' => array ('George Lucas', 'Richard Marquand', Irvin Kershner '),' compare '=>' IN ',), array (' key '=>' film_title ',' value '=>' Phantom Menace ',' Attaque des clones ',' Revenge of the Sith ' ), 'compare' => 'NOT LIKE'),)); $ query = new WP_Query ($ sw_args); if ($ the_query-> have_posts ()) echo '

Films par réalisateurs

'; écho '
    '; while ($ the_query-> have_posts ()) $ the_query-> the_post (); écho '
    • '; écho '
    • '. get_the_title (). '
    • '; écho '
    • '. get_post_meta ($ query-> post-> ID, 'directeur', true). '
    • '; écho '
  • " écho '
'; / * Restaure les données de post d'origine * / wp_reset_postdata ();

Utilisation de WP_User_Query

Juste comme dans la dernière partie quand nous avons utilisé WP_Query pour trouver des publications avec certaines valeurs pour divers champs personnalisés, nous pouvons utiliser WP_QueryEquivalent de la table des utilisateurs WP_User_Query.

Par exemple, si nous avions un champ personnalisé appelé subscriber_level et voulait trouver uniquement les utilisateurs qui avaient le niveau d'abonné de extra spécial ou super spécial Nous avons pu, à peu près de la même manière, rechercher des films réalisés par les trois réalisateurs des films Star Wars:

 $ args = array ('meta_query' => array (array ('key' => 'subscriber_level', 'value' => array ('extra_special', 'super_special'); 'compare' '=>' = ')) ; $ user_query = new WP_User_Query ($ args); if (! empty ($ user_query-> résultats)) echo '

Utilisateurs Extra et Super Spéciaux

'; écho '
    '; foreach ($ user_query-> résultats en tant que $ user) echo '
  • '. $ user-> display_name. '
  • '; écho '
';

Comme avec WP_Query, nous pouvons combiner différentes comparaisons pour contrôler davantage les utilisateurs renvoyés par notre requête. Cet exemple suivant combine la dernière requête avec une requête, cette fois-ci du wp_users se table pour tous les utilisateurs dont les noms sont Luke, Han ou Leia.

 $ args = array ('meta_query' => array (array ('key' => 'subscriber_level', 'value' => array ('extra_special', 'super_special'); 'compare' '=>' = ')), 'search' => array ('Luke', 'Han', 'Leia'), 'search_columns' => array ('user_nicename', 'display_name'),); $ user_query = new WP_User_Query ($ args); if (! empty ($ user_query-> résultats)) echo '

Utilisateurs Extra Spéciaux et Super Spéciaux Nommés Luke, Han ou Leia

'; écho '
    '; foreach ($ user_query-> résultats en tant que $ user) echo '
  • '. $ user-> display_name. '
  • '; écho '
';

Emballer

Dans cette série, vous avez été initié aux métadonnées WordPress et appris quelques leçons sur les concepts de base de PHP tout au long du processus..

Vous avez appris à extraire les valeurs des champs stockant les métadonnées de publication et d'utilisateur et à construire des requêtes pour les publications et les utilisateurs en fonction de métadonnées. Avec ces connaissances, vous êtes prêt à utiliser quelques champs personnalisés et à utiliser WordPress comme système de gestion de contenu complexe..