WP_Query en wordpress e incluir ACF en los resultados

3 minutos de lectura

Intento obtener todas las publicaciones de un tipo de publicación personalizada en WordPress e incluir también los campos personalizados avanzados (ACF) en los resultados, para generar un archivo JSON con los datos.

$query = new WP_Query(array(
  'post_type' => 'resources',
  'post_status' => 'publish',
  'posts_per_page' => -1,
));

echo "var json=". json_encode($query->get_posts());

con un sencillo WP_Query, los datos de ACF no están incluidos y tengo que iterar en los resultados y obtener todos los ACF manualmente uno por uno. ¿Hay alguna forma de incluirlos en el original? WP_Query ¿resultados?

  • defina una matriz, use while loop para recorrer cada publicación, envíe los datos de las publicaciones que desea (incluido el ACF) a la matriz, json_encode la matriz.

    – Stender

    18 de junio de 2020 a las 10:45

Avatar de usuario de Stender
Stender

Esta sería mi forma de hacerlo.

Empuje lo que quiera a la matriz y codifíquelo.

<?php
$array = array();

$args         = array(
    'post_type'      => 'resources',
    'post_status'    => array( 'publish' ),
    'nopaging'       => true,
    'posts_per_page' => '-1',
    'order'          => 'ASC',
    'orderby'        => 'ID',

);
$queryResults = new WP_Query( $args );

if ( $queryResults->have_posts() ) {
    $counter = 0;
    while ( $queryResults->have_posts() ) {
        $queryResults->the_post();
        $array[ $counter ][ 'ID' ]           = get_the_ID();
        $array[ $counter ][ 'name' ]         = get_the_title();
        $array[ $counter ][ 'thumbnailURL' ] = get_the_post_thumbnail_url();
        $array[ $counter ][ 'place' ]        = get_field( 'resource_location' );
        //etc etc etc

        $counter++;
    }

    $jasoned = json_encode( $array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES );
    echo $jasoned;
} else {
    //nothing found
}
wp_reset_postdata();

  • de lo contrario, puede modificar la consulta para incluir lo que desea, con un pre_get_posts acción. escriba una función que empuje los metadatos al resultado y listo: su trabajo está hecho. – Lea sobre esto aquí: advancedcustomfields.com/resources/query-posts-custom-fields/…en “Parámetros dinámicos de $_GET”

    – Stender

    18 de junio de 2020 a las 11:14


  • De acuerdo. Estaba pensando que podría haber una forma de evitar el bucle while, por motivos de rendimiento. Pero parece que no lo hay. Gracias. lo haré con tu solución

    – Tasas

    18 de junio de 2020 a las 13:15

  • @Tasos Según mi primera respuesta. Había dicho lo mismo que no hay solución, excepto recorrer la publicación para obtener el campo ACF. No estoy seguro de cómo esta solución te ayudó con lo que ya dije en primer lugar. Buena suerte.

    – Siempre ayudando

    18 de junio de 2020 a las 20:52

Puedes usar get_fields() para obtener todos los campos acf registrados a la vez con la publicación. Echa un vistazo a la documentación. aquí.

  • Buen esfuerzo. Pero ‘get_feilds’ significa que habrá varias líneas de código para obtener el campo y su valor. Lo mejor es recorrerlo todo e ir desde allí.

    – Siempre ayudando

    18 de junio de 2020 a las 10:54

  • Solo obtendrá qué campos están registrados aquí, pero no el valor de los campos, ¿verdad?

    – Stender

    18 de junio de 2020 a las 11:10

  • @Stender, obtendrá tanto la clave como el valor de los campos adjuntos a la publicación a la vez.

    – HW Vista

    18 de junio de 2020 a las 13:42

Para agregar datos ACF en la consulta. WP_Query no ayudará.

WP_Query no devuelve valores de ningún campo personalizado. Para obtenerlos, debe recorrer las publicaciones y obtener los valores de los campos.

Consulte esta documentación: https://www.advancedcustomfields.com/resources/query-posts-custom-fields/

¿Ha sido útil esta solución?