Obține lista cu toate slug-urile tipurilor de postări înregistrate
Aș dori să obțin o listă (array) cu toate tipurile de postări pe care le-am înregistrat.
Mai exact, aș dori să preiau slug-urile lor.
Mă poate ajuta cineva? mulțumesc!
// Solutia 1 - Obține toate tipurile de postări înregistrate
$post_types = get_post_types();
print_r($post_types);
// Soluția 2 - Obține doar tipurile de postări publice
$args = array(
'public' => true
);
$post_types = get_post_types($args, 'names');
print_r($post_types);
// Soluția 3 - Obține tipurile de postări cu toate proprietățile lor
$post_types = get_post_types(array(), 'objects');
foreach ($post_types as $post_type) {
echo $post_type->name . "\n"; // afișează slug-ul
echo $post_type->label . "\n"; // afișează eticheta
}

Răspunsul lui @EAMann este corect, dar WordPress are deja o funcție încorporată pentru obținerea tuturor tipurilor de postări înregistrate: get_post_types
<?php
// conectează-te la init târziu, astfel încât totul să fie înregistrat
// poți folosi și get_post_types oriunde. De obicei, orice moment după init este potrivit.
add_action( 'init', 'wpse34410_init', 0, 99 );
function wpse34410_init()
{
$types = get_post_types( [], 'objects' );
foreach ( $types as $type ) {
if ( isset( $type->rewrite->slug ) ) {
// probabil vei dori să faci altceva aici.
echo $type->rewrite->slug;
}
}
}

Cea mai ușoară metodă este următoarea, folosind funcția WordPress get_post_types();
<?php
$get_cpt_args = array(
'public' => true,
'_builtin' => false
);
$post_types = get_post_types( $get_cpt_args, 'objects' ); // folosește 'names' dacă vrei să obții doar numele tipului de postare.
// afișează tipurile de postare înregistrate
echo '<pre>';
print_r($post_types);
echo '</pre>';
// faci ceva cu array-ul
if ( $post_types ) {
foreach ( $post_types as $cpt_key => $cpt_val ) {
// faci ceva.
}
}
?>

'object'
în $post_types = get_post_types( $get_cpt_args, 'object' )
ar trebui corectat la forma plurală 'objects'
:
$post_types = get_post_types( $get_cpt_args, 'objects' )
ref: https://developer.wordpress.org/reference/functions/get_post_types/

Când apelezi funcția register_post_type()
, aceasta adaugă noul tip de postare într-o variabilă globală numită $wp_post_types
. Astfel, poți obține o listă cu toate tipurile tale de postări din această variabilă:
function get_registered_post_types() {
global $wp_post_types;
return array_keys( $wp_post_types );
}
Variabila $wp_post_types
este un array care conține definițiile tipurilor tale de postări personalizate (CPT), cu fiecare set de argumente CPT (etichete, capabilități etc.) mapat la slug-ul CPT-ului. Apelând array_keys()
vei obține un array cu slug-urile CPT-urilor tale.
