Obtener lista de todos los slugs de tipos de entrada registrados
Me gustaría obtener una lista (array) de todos los tipos de entrada que he registrado.
Específicamente me gustaría recuperar sus slugs.
¿Alguien podría ayudarme? ¡gracias!

La respuesta de @EAMann es correcta, pero WordPress ya tiene una función incorporada para obtener todos los tipos de post registrados: get_post_types
<?php
// enganchar a init tarde, para que todo esté registrado
// también puedes usar get_post_types donde sea. Cualquier momento después de init suele estar bien.
add_action( 'init', 'wpse34410_init', 0, 99 );
function wpse34410_init()
{
$types = get_post_types( [], 'objects' );
foreach ( $types as $type ) {
if ( isset( $type->rewrite->slug ) ) {
// probablemente quieras hacer algo más aquí.
echo $type->rewrite->slug;
}
}
}

La forma más sencilla es la siguiente utilizando la función de WordPress get_post_types();
<?php
$get_cpt_args = array(
'public' => true,
'_builtin' => false
);
$post_types = get_post_types( $get_cpt_args, 'objects' ); // usa 'names' si solo quieres obtener el nombre del tipo de contenido.
// ver los tipos de contenido registrados
echo '<pre>';
print_r($post_types);
echo '</pre>';
// hacer algo con el array
if ( $post_types ) {
foreach ( $post_types as $cpt_key => $cpt_val ) {
// hacer algo.
}
}
?>

'object'
en $post_types = get_post_types( $get_cpt_args, 'object' )
debe corregirse al plural 'objects'
:
$post_types = get_post_types( $get_cpt_args, 'objects' )
ref: https://developer.wordpress.org/reference/functions/get_post_types/

Cuando llamas a register_post_type()
, esta función añade tu nuevo tipo de contenido a una variable global llamada $wp_post_types
. Por lo tanto, puedes obtener una lista de todos tus tipos de contenido desde ahí:
function get_registered_post_types() {
global $wp_post_types;
return array_keys( $wp_post_types );
}
La variable $wp_post_types
es un array que contiene las definiciones de tus CPT (Custom Post Types), con cada conjunto de argumentos del CPT (etiquetas, capacidades, etc.) mapeado al slug del CPT. Llamar a array_keys()
te dará un array con los slugs de tus CPTs.
