Je sais comment obtenir une valeur de champ personnalisé pour un article spécifique.
get_post_meta($post_id, $key, $single);
Ce dont j'ai besoin, c'est d'obtenir toutes les valeurs associées à une clé de publication personnalisée, dans toutes les publications .
Quelqu'un sait d'un moyen efficace de le faire? Je ne voudrais pas parcourir tous les identifiants de post dans la base de données.
Exemple:
4 publications, toutes avec des valeurs différentes pour un champ personnalisé appelé "Humeur". 2 messages ont la valeur 'heureux', 1 article 'en colère' et 1 article a 'triste'
Je veux publier: dans tous les articles que nous avons: deux auteurs heureux, un auteur en colère et un auteur triste.
Mais pour BEAUCOUP de messages.
Ce que je recherche, c'est soit:
- une fonction WP pour l'obtenir. ou
- une requête personnalisée pour obtenir cela aussi efficacement que possible.
custom-field
Mikkelbreum
la source
la source
Réponses:
Une approche possible serait d'utiliser l'une des méthodes d'assistance de la classe WPDB pour effectuer une requête méta plus précise. Toutefois, l’utilisation de certaines de ces fonctions a pour inconvénient de ne pas récupérer un simple tableau de données et de devoir faire des références inutiles aux propriétés d’un objet, même si vous n’appelez qu’une colonne ou une ligne.
Bien sûr, toutes les fonctions ne sont pas identiques, et une mention utile va à la méthode WPDB ,
get_col
qui renvoie un simple tableau plat des données interrogées, j’en fais cette mention spécifiquement parce que l’exemple suivant fera appel à cette méthode. .WordPress - WPDB Sélection d'une colonne de données
$ wpdb-> get_col ()
Voici un exemple de fonction qui interroge la base de données pour toutes les publications d'un type de publication choisi, d'un statut de publication et avec une clé méta spécifique (ou un champ personnalisé pour les moins avisés du point de vue technique).
Ainsi, par exemple, si vous souhaitez savoir quelles publications ont une méta-clé d’ évaluation , pour les films de type publication et que vous souhaitez stocker ces informations dans une variable, un exemple d’un tel appel serait ..
Si vous ne voulez rien faire d’autre que d’imprimer ces données à l’écran, la fonction implode de PHP peut rapidement fusionner ce simple tableau en lignes de données.
Vous pouvez également utiliser les données renvoyées pour déterminer le nombre de publications ayant ces méta-valeurs en effectuant une boucle simple sur les données renvoyées et en créant un tableau des nombres, par exemple.
Cette logique pourrait être appliquée à divers types de données et étendue pour fonctionner de différentes manières. J'espère donc que mes exemples ont été utiles et simples à suivre.
la source
DISTINCT
juste après laSELECT
dans la fonction ci-dessus. Pourrait être utile.Je voudrais juste ajouter une petite chose au code de t31os ci-dessus. J'ai changé "SELECT" en "SELECT DISTINCT" pour éliminer les entrées en double lorsque j'ai utilisé ce code moi-même.
la source
Il n'est ni bon ni nécessaire d'utiliser la somme globale $ wpdb:
la source
le moyen le plus rapide serait une requête personnalisée SQL et je ne suis pas sûr, mais vous pouvez essayer
Si quelque chose alors c'est un début.
la source
Pour obtenir toutes les méta-valeurs par une méta-clé
Vérifiez wp-> db wordpress codex
la source
Il n'y a aucune raison pour que vous ne puissiez pas fusionner t31os et le code de Bainternet pour obtenir une instruction préparée réutilisable (style wordpress) qui renvoie le nombre et les valeurs en une seule opération efficace.
C'est une requête personnalisée, mais elle utilise toujours la couche d'abstraction de la base de données wordpress - ainsi, par exemple, le nom des tables n'a pas d'importance, ou si elles changent, il s'agit d'une instruction préparée, ce qui nous protège d'autant mieux des attaques SQL, etc. .
Dans ce cas, je ne vérifie plus le type de message et j'exclus les chaînes vides:
Dans ce cas particulier
Cela retournera un tableau d'objets comme ceci:
la source
Utilisez ce qui suit avec foreach
Suppose que le nom de votre clé de champ personnalisé est
la source