Obtener los IDs de un tipo de entrada personalizada
He creado una entrada personalizada 'case studies' que tiene varias publicaciones.
Deseo obtener los IDs de cada una de estas publicaciones para manipular los datos, pero a pesar de mirar hilos similares, no puedo encontrar una manera de lograrlo. Algo como:
para cada publicación de tipo personalizado, obtener el id
Estoy creando una función para mostrar esta información en el panel de administración, aquí está el fragmento de código:
function display_meta_box( $case_study )
{
if (in_array('case_studies', get_post_types()))
{
...obtener los IDs de todas las publicaciones de tipo 'case_studies'...
}
...hacer otras cosas con los IDs...
}

Puedes obtener un array simple de IDs de CPTs utilizando get_posts
con el parámetro fields
.
$all_post_ids = get_posts(array(
'fields' => 'ids', // Solo obtener IDs
'posts_per_page' => -1, // Todos los posts
'post_type' => 'case_studies' // Tipo de post personalizado
));

Encontré la base de la respuesta enterrada en el codex
// Argumentos para consultar posts del tipo 'case_studies'
$args = array( 'post_type' => 'case_studies');
// Crear nueva consulta WP_Query
$loop = new WP_Query( $args );
// Iniciar loop para mostrar los posts
while ( $loop->have_posts() ) : $loop->the_post();
// Mostrar el ID de cada post
the_ID();
endwhile;

No necesitas usar echo
con the_title()
y también puedes usar the_ID()
en lugar de echo get_the_id()
.

Observa la diferencia entre las funciones the_*
y get_the_*
. En la mayoría de los casos es como la diferencia entre echo
y return
.

Curiosamente, en mi caso, necesité usar get_the_* para manipular la información dentro del bucle while.

configura fields
como ids
en tu consulta y obtendrás solo un array de IDs, usando significativamente menos memoria. Probablemente también quieras configurar posts_per_page
como -1
para obtener todos tus posts.

@Milo Gracias, pero en este caso realmente necesito los títulos de cada custom post devuelto. Si devolviera IDs y luego usara get_the_title(id), ¿el rendimiento sería mejor que la implementación actual?
