Afficher toutes les valeurs d'un champ personnalisé créé avec ACF sur une page

9

J'utilise Advanced Custom Fields / ACF pour créer des champs personnalisés. L'un d'eux est une liste de cases à cocher qui affichent certaines options (option1, option2, option3 ...) .

Maintenant, je veux afficher toutes les options de ce champ sur une page distincte sur le frontend comme suit:

Options:
- option 1
- option 2
- option 3
- ...

Comment puis-je récupérer toutes les options avec les clés d'ACF?

Bob
la source
Veuillez être un peu plus clair sur ce que vous essayez exactement de réaliser. ACF est conçu pour afficher la sortie des champs personnalisés sur le frontend, et non pour permettre la saisie du frontend.
SickHippie

Réponses:

16

La get_field_objectfonction ACF peut être utilisée pour obtenir des informations et des options pour un champ spécifique.

Vous avez d'abord besoin de la clé de champ du champ spécifique que vous souhaitez afficher. Lors de la modification d'un groupe de champs, cliquez sur l'onglet des options d'écran en haut de la page. Vous devriez voir une option pour basculer l'affichage de la clé de champ (elle est masquée par défaut pour économiser de l'espace):

Touche de champ

Une fois que vous avez la clé, vous pouvez charger l'objet de champ et afficher ses valeurs:

$field_key = "field_5039a99716d1d";
$field = get_field_object($field_key);

if( $field )
{
    echo '<select name="' . $field['key'] . '">';
        foreach( $field['choices'] as $k => $v )
        {
            echo '<option value="' . $k . '">' . $v . '</option>';
        }
    echo '</select>';
}
Milo
la source
Ce serait bien si nous pouvions référencer le nom, aussi facilement que d'utiliser la clé. De cette façon, si vous avez cela dans un plugin et que vous avez déjà eu besoin de le tester sur une autre instance de WordPress avec acf activé, vous n'avez pas à rechercher la clé et à la modifier à nouveau simplement parce que vous
êtes
0

Si vous essayez de sortir quelque chose si une case à cocher a été cochée, utilisez:

<?php if(in_array('news', get_field('checkbox') )): ?>
    <h1>News was ticked!</h1>
<?php endif; ?>

Si vous essayez d'afficher simplement une liste des options cochées, utilisez ceci:

<p>Categories: <?php get_field('checkbox'); ?></p>

Cela vous donnera un tableau de valeurs que vous pouvez gérer avec une foreachdéclaration. L'utilisation the_field('checkbox')vous donnera une chaîne séparée par des virgules des options que vous pouvez également diviser.

Je vous suggère également d'aller sur le site d' ACF et de parcourir la documentation. La plupart des questions de ce type y trouveront une réponse assez détaillée, et le développeur est également actif dans ses forums de support.

EDIT: Si vous voulez que la liste des options disponibles soit sortie dans une page pour générer une requête dynamique, j'ai juste la chose. Ceci est un morceau que je viens de construire hier pour extraire une liste de méta-valeurs d'une clé de champ personnalisée donnée (en utilisant ACF). Je l'ai fait assez générique pour vous. Il y a un autre morceau de JS pour gérer la demande ajax, et un morceau de php plutôt alambiqué qui sort les messages résultants. Je ne peux pas vraiment réécrire ceux-ci - le JS est un appel / réponse ajax WP orienté vers l'avant standard, et le PHP est un gâchis de vérifications conditionnelles pour les 12 champs ACF différents que nous affichons (dont 2 sont des répéteurs). Les bases sont ce code ici, le bouton onClickappelle la fonction ajax dans un fichier JS séparé, et le php pour la fonction ajax elle-même configure essentiellement un tableau d'arguments pour la requête,$selectedOptionou en $_POST['option']tant que meta_value. Celui-ci est envoyé à a new WP_Query( $args );, qui est ensuite utilisé dans une boucle, dont la sortie est renvoyée aux js via add_action('wp_ajax_the_ajax_hook', 'fetch_option_list');et add_action( 'wp_ajax_nopriv_the_ajax_hook', 'fetch_option_list' ); //for non logged-in users.

 // Get list of meta_values for given meta_key and post_type (page, post, custom post type)
 function meta_list($key = '', $type = '', $status = 'publish'){
 global $wpdb;
    $r = $wpdb->get_col($wpdb->prepare( "
    SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
    WHERE pm.meta_key = '%s'
    AND p.post_status = '%s'
    AND p.post_type = '%s'
    ORDER BY pm.meta_value ASC", $key, $status, $type));
    return $r;
}

 // ADD EG A FORM TO THE PAGE
 function meta_ajax_frontend(){
    $formlist = meta_list('metakey', 'posttype');
    echo '<form id="optionSelect">';
    echo '<select id="optionList" name="optionList">';
    foreach($formlist as $fl => $val) {
        echo '<option>' . $val . '</option>';
    }
    echo '</select>';
    echo '<input name="action" type="hidden" value="the_ajax_hook" />
    <input id="submit_button" value = "Search" type="button" onClick="fetch_meta();" />
    </form>
    <div id="meta_list">
    Please select an option from the list
    </div>';
 }
SickHippie
la source
Mm, si je fais cela, je produirai les options attribuées au "post", ce dont j'ai besoin est de montrer toutes les options dans une "page" comme une liste complète des options.
Bob
Je suis curieux de savoir pourquoi vous avez besoin que la liste d'options du backend apparaisse sur le frontend. Voulez-vous simplement afficher la liste des options avec les éléments sélectionnés dans l'administrateur sélectionné? Si vous essayez de l'utiliser dans le cadre d'un formulaire (permettant à l'utilisateur de modifier les données vérifiées), ce n'est pas le bon plugin ou la bonne méthode pour le faire. Cependant, si vous souhaitez que la liste d'options soit utilisée comme pré-filtre pour réécrire la requête, je peux avoir ce qu'il vous faut. Je modifierai mon message ci-dessus avec ce code ici sous peu.
SickHippie
Salut im Bob avec un autre acc, j'ai besoin des options du backend pour créer une sorte de "menu" avec eux. Je pense que votre code récupère les messages et les options qui leur sont attribuées. Je n'ai besoin que de la liste d'options comme celle qui apparaît sur le backend lorsque vous créez un post. Je continuerai à travailler avec votre code pour voir si je peux comprendre quelque chose. Merci @SickHippie
Dunning-Kruger
Non, il tire la liste des options qui ont été sélectionnées dans cette case à cocher - c'est-à-dire, il dit "voici la case à cocher, il y a des messages auxquels des valeurs ont été affectées" option 1 "," option 2 "," option 4 " et ainsi de suite. Il extrait littéralement la liste meta_value en fonction de cette meta_key. J'en avais besoin pour une liste dynamique, mais si vous avez créé un brouillon de message, toutes les cases à cocher seront sélectionnées, il extraira toutes les options dans un tableau pour vous. C'est le tableau J'utilise le foreachpour parcourir. Les dernières fonctions apportent la liste des messages via ajax, mais j'ai laissé de côté
SickHippie