Obtener lista de todos los slugs de tipos de entrada registrados

21 nov 2011, 21:18:55
Vistas: 20.7K
Votos: 6

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!

0
Todas las respuestas a la pregunta 4
1
11

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;
        }
    }
}
21 nov 2011 21:53:22
Comentarios

CONSEJO: No necesitas llamar a get_post_type_object si configuras la llamada a get_post_types para que te devuelva objetos, por ejemplo: $types = get_post_types( '', 'objects' );

t31os t31os
23 nov 2011 11:53:46
1

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.
    }
}
?>
23 ene 2017 08:28:55
Comentarios

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

Pea Pea
25 sept 2024 06:27:06
1

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.

21 nov 2011 21:38:12
Comentarios

si miras en wp-includes/post.php la función incorporada get_post_types() está devolviendo el mismo array global `$wp_post_types`. ¿Por qué creamos una nueva función cuando ya tenemos una función incorporada?

Aamer Shahzad Aamer Shahzad
3 nov 2021 09:19:32
0
-1

Una solución más elegante:

<?php
$cpt_args = [
    'public'   => true,
    '_builtin' => false
];

$type_slugs = array_map( function( $type ) {
    return $type->slug;
}, get_post_types( $cpt_args, 'objects' ) );
8 jun 2017 12:31:15