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?
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/
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