Je voudrais créer un wp_query qui retournerait des méta de messages à l'intérieur du posts
tableau.
$args = array (
'post_type' => 'page',
'meta_key' => 'someMetaKeyName',
);
// The Query
$query = new WP_Query( $args );
Cela renvoie quelque chose comme:
Comme vous pouvez le voir, les publications n'ont pas de métadonnées, est-il possible d'inclure également les métadonnées dans le tableau renvoyé?
PS Je ne veux pas de wp_queries supplémentaires pour des raisons de performances.
wp-query
custom-field
post-meta
YemSalat
la source
la source
get_post_meta
sur des clés individuelles, 2) exécuterget_post_custom
pour obtenir tous les champs personnalisés d'un article en une seule fois, ou 3) créer votre propre requête à l'aide de la classe $ wpdb (get_results()
) pour créer votre propre objet de retour . (Documentation de la classe $ wpdb: codex.wordpress.org/Class_Reference/wpdb )Réponses:
Par défaut,
WP_Query
retourne lesWP_Post
objets standard pour les publications interrogées. Je crois qu'avec une réécriture intelligente et l'utilisation des filtres fournis,WP_Query
vous pouvez ajouter des objets auWP_Post
tableau d'objets retournés .Est-ce que ce sera performant? À mon avis, cela nuira davantage aux performances car vous devrez joindre les résultats dans votre requête car les champs personnalisés ne sont pas enregistrés dans le
wp_posts
tableau, mais dans lewp_postmeta
tableauLa récupération de la méta-publication est très rapide et ne nécessite aucune instance supplémentaire de
WP_Query
. Vous pouvez simplement appeler le champ personnalisé avecget_post_meta()
. WordPress était très réfléchi lorsque les champs personnalisés ont été introduits. Ils ont ajouté un cache pour les mettre en cache, donc que vous interrogiez 1 ou 100 champs personnalisés, vous frappez la base de données une fois, très rapidement. Pour un test complet et une explication, voir ce post que j'ai récemment fait sur ce sujet.À mon avis, l'appel de base de données supplémentaire et le temps réel passé en valent la peine et plus rapide que la réécriture
WP_Query
de manière à inclure des champs personnalisés dans l'objet de publication standard renvoyé par$posts
la source
get_post_meta()
pour chaque message .. Je préférerais qu'il y ait un moyen de stocker des données supplémentaires soit directement dans lewp_posts
tableau, soit dans un table connexe qui n'est pas autant d'un mindf * ck quewp_postsmeta
c'est.get_post_meta()
soit en tant qu'objet de publication, vous devrez l'appeler sur chaque publication. C'est la même chose avec des balises de modèle commethe_content()
, vous devez l'appeler sur chaque publication.Cette question a plus d'un an, mais j'ai le même problème, et voici la fonction qui ajoutera chaque méta_value et meta_key à $ wp_query objet,
au lieu d'interroger chaque méta post dans la boucle while, cette fonction fera un exemple de requête supplémentaire:
"SELECT meta_key, meta_value, post_id FROM $ wpdb-> postmeta WHERE post_id IN (1,2,3,4,5 ...)"
où (1, 2, 3, 4, 5 ...) est actuellement les ID de publication recherchés de $ wp_query
Un "postmeta" supplémentaire sera écrit dans chaque $ wp_query-> posts [$ i]
$wp_query->posts[0]->postmeta
Exemple avec 'someMetaKeyName' n'oubliez pas de mettre
add_query_meta()
à votre thème functin.phpla source
J'ai eu un problème similaire récemment, j'avais besoin d'obtenir 7 morceaux de métadonnées à partir d'un type de message personnalisé, mais j'avais également besoin d'obtenir le message en fonction d'un morceau de métadonnées.
J'ai donc créé l'instruction SQL suivante, je l'utilise souvent. J'espère que cela aidera quelqu'un d'autre. Je vais essayer de l'expliquer du mieux que je peux.
D'abord, j'obtiens les fonctions de base de données wordpress avec global $ wpdb. Ensuite, j'ai défini le post-type avec $ pt. Pour obtenir le message correct qui correspond à une valeur spécifique dans post_meta, j'ai défini le $ mk (meta_key)
Ensuite, j'ai défini la var $ mv (meta_value). (dans ce cas, la méta-valeur correspond à un postid)
$ mk1- $ mk7 sont les meta_keys que je veux de chaque article. (Je vais saisir les valeurs dans l'instruction select)
Je fais aussi la 'commande par' une var, en mettant $ ord
L'instruction select se présente comme suit: je sélectionne l'ID du post et le post_title dans le POST ou 'p.'
Ensuite, je sélectionne toutes les métadonnées dont j'ai besoin en les sélectionnant avec pm1. -> pm.7 et en saisissant la méta_valeur et en les renommant (AS) afin qu'elle soit plus lisible lors de la récupération des données de mon objet.
Je crée un LEFT JOIN pour les métadonnées dont j'ai besoin pour correspondre à la publication. (pm)
Je crée 7 jointures de gauche pour chacune des métadonnées que je dois récupérer. (pm1-pm7)
L'instruction WHERE est basée sur la première LEFT JOIN (pm) afin qu'elle sache que je n'ai besoin que des publications où les métadonnées correspondent.
J'ajoute également un «ET» pour le type de message et pour les post_status qui ne sont pas des brouillons. (donc seuls les articles publiés)
Enfin, j'ajoute la clause «order by».
Cela fonctionne rapidement et avec les index intégrés dans Wordpress, donc cela semble efficace.
Je ne sais pas si quelque chose est meilleur que ça, mais si c'est le cas, j'adorerais l'utiliser.
J'espère que cela t'aides.
Marcus
la source
Hé, essayez celui-ci, je pense que ça marche bien.
la source
meta_key
etmeta_query[]['key']
aussi bien?meta_key
et / oumeta_query
ne modifiez pas le type de résultats retournés, uniquement la requête elle-même.