web-dev-qa-db-fra.com

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

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

Maintenant, je veux afficher toutes les options de ce champ sur une page séparée sur le frontend comme ceci:

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

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

9
Bob

La fonction get_field_object 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 imprimer. Lors de la modification d'un groupe de champs, cliquez sur l'onglet 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):

Field Key

Une fois que vous avez la clé, vous pouvez charger l'objet de champ et sortir 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>';
}
15
Milo

Si vous essayez de générer 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 simplement d’afficher 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 déclaration foreach. Utiliser the_field('checkbox') vous donnera une chaîne d'options que vous pouvez également séparer, séparées par des virgules.

Je vous suggère également de vous rendre sur le site d’ACF et de consulter la documentation. La plupart des questions de ce type recevront une réponse détaillée, et le développeur est également actif sur 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, je n'ai que ce qu'il vous faut. C’est un document que je viens de réaliser hier pour extraire une liste de méta-valeurs à partir d’une clé de champ personnalisée donnée (à l’aide d’ACF). Je l'ai fait assez générique pour vous. Il existe un autre bloc de JS pour gérer la requête ajax, et un morceau de php plutôt compliqué qui affiche les posts résultants. Je ne peux pas vraiment les réécrire - le JS est standard WP appel/réponse ajax tourné vers l'avant, et le PHP est un fouillis de contrôles conditionnels pour les 12 champs ACF différents que nous avons ' ré-affichage (dont 2 répéteurs). Les principes de base sont ce code ici, le bouton onClick appelle la fonction ajax dans un fichier JS séparé et le php pour la fonction ajax lui-même configure essentiellement un tableau d'arguments pour la requête, dont l'un est $selectedOption ou $_POST['option'] sous forme de méta_value. Cela est envoyé à une new WP_Query( $args );, qui est ensuite utilisée dans une boucle, dont la sortie est renvoyée au 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>';
 }
0
SickHippie