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

9

Estoy usando Advanced Custom Fields / 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 la interfaz así:

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

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

Beto
fuente
Sea un poco más claro sobre lo que está tratando de lograr exactamente. ACF está diseñado para mostrar la salida de los campos personalizados en la interfaz, no para permitir la entrada de la interfaz.
SickHippie

Respuestas:

16

La get_field_objectfunción ACF 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 tecla de campo (está oculta de forma predeterminada para ahorrar espacio):

Clave de campo

Una vez que tenga la clave, puede cargar el objeto de campo y generar sus valores:

$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
fuente
Sería bueno si pudiéramos hacer referencia al nombre, tan fácilmente como es usar la clave. de esta manera, si tiene esto en un complemento y alguna vez tuvo que probarlo en otra instancia de WordPress con acf habilitado, no tiene que buscar la clave y cambiarla nuevamente solo porque está en el entorno B.
klewis
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á tratando de 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 foreachdeclaración. El uso the_field('checkbox')le dará una cadena separada por comas de las opciones que también puede dividir.

También te sugiero que vayas al sitio de ACF y revises la documentación. La mayoría de las preguntas de este tipo serán respondidas allí con detalles decentes, y el desarrollador también está activo en sus foros de soporte.

EDITAR: si desea que la lista de opciones disponibles salga en una página para generar una consulta dinámica, tengo justo lo que necesita. Esta es una pieza que construí ayer para extraer una lista de meta valores de una clave de campo personalizada (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 complicada de php que genera las publicaciones resultantes. Realmente no puedo reescribirlos: el JS es una llamada / respuesta ajax estándar de WP orientada hacia adelante, y el PHP es un desastre de verificaciones condicionales para los 12 campos ACF diferentes que estamos mostrando (2 de los cuales son repetidores). Lo básico es este código aquí, el botón onClickllama a la función ajax en un archivo JS separado, y el php para la función ajax en sí misma esencialmente configura una matriz de argumentos para la consulta,$selectedOptiono $_POST['option']como meta_value. Eso se alimenta a a new WP_Query( $args );, que luego se usa en un bucle, cuya salida se retroalimenta a 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>';
 }
SickHippie
fuente
Mm, si hago esto, mostraré las opciones asignadas a la "publicación", lo que necesito es mostrar todas las opciones en una "página" como una lista completa de opciones.
Bob
Tengo curiosidad por saber por qué necesita que se muestre la lista de opciones del backend en la interfaz. ¿Desea mostrar la lista de opciones con los elementos seleccionados en el administrador seleccionado? Si está intentando usar esto como parte de un formulario (permitiendo la alteración del usuario de los datos verificados), este no es el complemento o método correcto para hacerlo. Sin embargo, si desea que la lista de opciones se use como prefiltro para reescribir la consulta, es posible que tenga exactamente lo que necesita. Editaré mi publicación anterior con ese código aquí en breve.
SickHippie
Hola, soy Bob con otro acc. Necesito las opciones del backend para crear una especie de "menú" con ellos. Creo que su código recupera las publicaciones y las opciones asignadas a ellas. Solo necesito la lista de opciones como la que aparece en el backend cuando creas una publicación. Seguiré trabajando con su código para ver si puedo resolver algo. Gracias @SickHippie
Dunning-Kruger
No, extrae la lista de opciones que se han seleccionado de esa casilla de verificación, es decir, dice "aquí está la casilla de verificación, hay publicaciones a las que se les han asignado valores 'opción 1', 'opción 2', 'opción 4' y así sucesivamente. Literalmente solo extrae la lista meta_value basada en esa meta_key. Lo necesitaba para una lista dinámica, pero si creaste un borrador de publicación, todas las casillas de verificación seleccionadas sacarán todas las opciones en una matriz para ti. Esa es la matriz Estoy usando el foreachbucle para pasar. Las funciones posteriores traen la lista de publicaciones a través de ajax, pero dejé ese bit.
SickHippie