Muestra todos los valores de un campo personalizado creado con ACF en una página

9

Estoy usando Campos personalizados avanzados / ACF para crear campos personalizados. Una de ellas es una lista de casillas de verificación que muestran algunas opciones (opción1, opción2, opción3 ...) .

Ahora quiero mostrar todas las opciones de este campo en una página separada en el frontend así:

Opciones:
- Opción 1
- Opción 2
- Opción 3
- ...

¿Cómo puedo recuperar todas las opciones con claves de ACF?

    
pregunta Bob 27.03.2012 - 21:38

2 respuestas

14

La función get_field_object se puede usar para obtener información y opciones para un campo específico.

Primero necesita la clave de campo del campo específico que desea generar. Al editar un grupo de campos, haga clic en la pestaña de opciones de pantalla en la parte superior de la página. Debería ver una opción para alternar la visualización de la clave de campo (está oculta de forma predeterminada para ahorrar espacio):

Unavezquetengalaclave,puedecargarelobjetodecampoygenerarsusvalores:

$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>';
}
    
respondido por el Milo 14.06.2013 - 01:45
0

Si está intentando generar algo si se marcó una casilla de verificación, use:

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

Si está intentando mostrar una lista de las opciones marcadas, use esto:

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

Esto le dará una serie de valores que puede administrar con una declaración foreach . El uso de the_field('checkbox') le dará una cadena separada por comas de las opciones que también puede dividir.

También le sugeriría que vaya al sitio de ACF y revise la documentación. La mayoría de las preguntas de este tipo serán respondidas allí con un detalle decente, y el desarrollador también está activo en sus foros de soporte.

EDITAR: Si desea que la lista de opciones disponibles se muestre en una página para generar una consulta dinámica, tengo lo que necesito. Esta es una pieza que acabo de crear ayer para extraer una lista de valores meta de una clave de campo personalizada dada (usando ACF). Lo he hecho bastante genérico para ti. Hay otra parte de JS para manejar la solicitud de ajax, y una pieza bastante compleja de php que genera las publicaciones resultantes. Realmente no puedo reescribirlos: el JS es una llamada / respuesta ajax WP estándar orientada hacia adelante, y el PHP es un lío de verificaciones condicionales para los 12 campos ACF diferentes que estamos mostrando (2 de los cuales son repetidores). Los conceptos básicos son este código aquí, el botón onClick llama a la función ajax en un archivo JS separado, y el php para la propia función ajax esencialmente establece una matriz de argumentos para la consulta, uno de los cuales es $selectedOption o $_POST['option'] como meta_valor. Eso se alimenta a un new WP_Query( $args ); , que luego se usa en un bucle, cuya salida se retroalimenta al js a través de add_action('wp_ajax_the_ajax_hook', 'fetch_option_list'); y 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>';
 }
    
respondido por el SickHippie 27.03.2012 - 23:25

Lea otras preguntas en las etiquetas