Comment obtenir la clé de champ Advanced Custom Fields à partir de la base de données WordPress?
Je suis à l'utilisation Avancée des Champs Personnalisés d'après-type. J'ai peu de sélectionner les champs personnalisés, et je veux montrer à tous l'étiquette de choix de chaque champ.
J'ai essayé de cette façon.
$field = get_field_object('hair_color');
$hair = $field["choices"];
foreach($hair as $value){
Faire un
var_dump($champ)
il apparaît vide:
array(18) {
["key"] => string(16) "field_hair_color"
["label"] => string(0) ""
["name"] => string(10) "hair_color"
["_name"] => string(10) "hair_color"
["type"]=> string(4) "text"
["order_no"]=> int(1)
["instructions"]=> string(0) ""
["required"]=> int(0)
["id"] => string(20) "acf-field-hair_color"
["class"] => string(4) "text"
["conditional_logic"] => array(3) {
["status"] => int(0)
["allorany"]=> string(3) "all"
["rules"]=> int(0)
}
["default_value"] => string(0) ""
["formatting"] => string(4) "html"
["maxlength"] => string(0) ""
["placeholder"] => string(0) ""
["prepend"] => string(0) ""
["append"] => string(0) ""
["value"] => bool(false)
}
Le seul moyen de faire le plein, c'est que:
get_field_object('field_51ac9d333d704');
array(17) {
["key"] => string(19) "field_51ac9d333d704"
["label"] => string(13) "Color de pelo"
["name"] => string(10) "hair_color"
["_name"] => string(10) "hair_color"
["type"] => string(6) "select"
["order_no"] => int(9)
["instructions"] => string(27) "Selecciona el color de pelo"
["required"] => int(0)
["id"] => string(20) "acf-field-hair_color"
["class"] => string(6) "select"
["conditional_logic"] => array(3) {
["status"] => int(0)
["rules"] => array(1) {
[0] => array(3) {
["field"] => string(19) "field_5195ef9879361"
["operator"] => string(2) "=="
["value"] => string(5) "small"
}
}
["allorany"] => string(3) "all"
}
["choices"] => array(5) {
["bald"] => string(5) "Calvo"
["brown"] => string(8) "Castaño"
["brunette"] => string(6) "Moreno"
["red"] => string(9) "Pelirrojo"
["blonde"] => string(5) "Rubio"
}
["default_value"] => string(0) ""
["allow_null"] => int(1)
["multiple"] => int(0)
["field_group"] => int(90679)
["value"]=> bool(false)
}
Mais j'ai 3 environnement, et je ne veux pas coder en dur le champ clé.
Est-il une solution?
Merci à l'avance.
source d'informationauteur user1432966
Vous devez vous connecter pour publier un commentaire.
Ici est une version modifiée de la réponse fournie par @BFDatabaseAdmin correspondant exactement meta_value dans "COMME"
Juste essayer de faire moi-même donc j'ai fait quelques enquête. Semble chaque champ et de groupe pour les ACF sont stockées dans la table wp_posts dans la base de données, types de poste personnalisés. les champs sont 'acf-champ' et les groupes sont acf-champ-groupe".
J'ai été en mesure d'utiliser cette fonction pour obtenir le champ de clé à utiliser ensuite update_field($field_key, $valeur) sur des postes qui n'ont pas le champ déjà.
Ensuite, j'ai été en mesure d'utiliser:
Mettre à jour le champ pour des postes qui avaient déjà ou ajouter le champ et il est la clé de référence pour les postes qui n'avaient pas déjà le terrain.
ACF fournit des moyens faciles pour aider à garder de multiples environnements dans sync - vous pouvez enregistrer vos champs avec PHP ou d'un fichier JSON. Faire cela vous permettra de continuer à utiliser get_field_object() avec un seul champ clé dans plusieurs environnements. Voir:
http://www.advancedcustomfields.com/resources/register-fields-via-php/
http://www.advancedcustomfields.com/resources/local-json/
J'ai l'habitude de faire de mon ACF développement avec l'interface utilisateur et ensuite d'exporter tous mes champs des groupes comme PHP déploiement à travers de multiples environnements.
Mise à JOUR avec un exemple simple:
Vous pourriez ajouter à functions.php ou un plugin personnalisé pour ajouter votre domaine à de multiples environnements par programmation .. puis vous appelez get_field_object() avec une commune field_key à travers tous les environnements
Je lance une autre option dans le mélange. Je pense que les questions /réponses sont bonnes, mais si vous regardez le groupe parent, vous n'obtiendrez jamais un terrain fiables parce que le nom de champ peut exister entre plusieurs groupes.
Par exemple, disons que vous avez deux groupes personnalisés - un pour le type de poste de livreset un pour les custom post type films. Les deux groupes ont ajouté un champ appelé de titre.
Dans la base de données, les deux sont stockées avec
post_except = 'title'
etpost_type = 'acf-field'
. Deux entrées avec le mêmepost_except
de sorte que toute requête en s'appuyant seulement surpost_except
sera mauvais, générique ou non.Toute requête en s'appuyant sur le post id n'est pas la grande forme non plus, en tant que post risque de ne pas toujours exister pour passer en.
De sorte que vous besoin de passer par une combinaison de domaine et de groupe pour obtenir le champ de la clé à partir du nom. Cet extrait de code qui fonctionne bien pour moi:
Sera de retour le domaine clé de nom et de groupe, ou null si aucun n'existe.
Utilisation:
La façon dont ACF travaille vraiment, vous devez utiliser la clé.
de (http://www.advancedcustomfields.com/resources/get_field_object/)
"Vous pouvez et devez utiliser le $field_key 100% du temps.
Le problème de l'utilisation de $nom_champ est que si la référence n'existe pas déjà, ACF ne sera pas en mesure de trouver l'objet de champ et ne sera pas en mesure d'enregistrer la valeur. Cette situation pourrait se produire si vous aviez utilisé le code pour insérer un post.
Aussi, il est plus efficace d'utiliser le field_key que le premier paramètre de la update_field fonctionner comme il le contourne la référence pour regarder."
Il n'y a aucun moyen de de manière fiable récupérer la clé en utilisant le nom, car le nom est métadonnées, et donc ouvert au changement, alors que la clé (au moins sans les modifier manuellement la base de données) n'est pas.
Cependant, cette fonction fonctionne avec la version la plus récente de l'ACF, avec un couple de mises en garde. ACF crée champ de groupes au sein de postes d'un custom post type d'ACF, mais toutes les données sur les champs eux-mêmes est tenue au sein de l'post_meta table.
Un avertissement: parce que le nom du champ est stocké dans un tableau, lorsque le trouver via SQL, vous devez appuyer sur une recherche générique, qui est ouvert à des erreurs. Aussi longtemps que l'ensemble de vos domaines totalement différents des noms, vous êtes bien, mais si par exemple vous avez un champ appelé "la ferme" et un autre appelé "agriculteur", cette erreur parce qu'il va trouver à la fois des champs.
Le seul moyen fiable pour mettre à jour les champs manuellement le code de la clé, mais ce n'est certes maladroit, qui est ce qui m'a amené ici pour commencer.