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

9

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

Je souhaite maintenant afficher toutes les options de ce champ sur une page distincte de l'interface, comme suit:

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

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

    
posée Bob 27.03.2012 - 21:38

2 réponses

14

La get_field_object peut utiliser la fonction ACF 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 générer. 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):

Unefoisquevousavezlaclé,vouspouvezchargerl'objetdechampetaffichersesvaleurs:

$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>';
}
    
réponse donnée Milo 14.06.2013 - 01:45
0

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 . En utilisant the_field('checkbox') , vous obtiendrez une chaîne d’options que vous pourrez également séparer.

Je vous suggère également de vous rendre sur site 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 dans ses forums d'assistance.

EDIT: Si vous souhaitez que la liste des options disponibles soit affichée dans une page permettant de 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 y a 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 un appel / réponse ajax WP orienté vers l’avant, et PHP est un fouillis de contrôles conditionnels pour les 12 champs ACF différents que nous affichons (dont 2 sont des 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 elle-même configure essentiellement un tableau d'arguments pour la requête, dont $selectedOption ou $_POST['option'] en tant que meta_value. Cela est envoyé à un new WP_Query( $args ); , qui est ensuite utilisé 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>';
 }
    
réponse donnée SickHippie 27.03.2012 - 23:25

Lire d'autres questions sur les étiquettes