Obține lista cu toate slug-urile tipurilor de postări înregistrate

21 nov. 2011, 21:18:55
Vizualizări: 20.7K
Voturi: 6

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
}
0
Toate răspunsurile la întrebare 4
1
11

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

SFAT: Nu este nevoie să apelezi get_post_type_object dacă setezi parametrul funcției get_post_types să returneze obiecte, de exemplu: $types = get_post_types( '', 'objects' );

t31os t31os
23 nov. 2011 11:53:46
1

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

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

Pea Pea
25 sept. 2024 06:27:06
1

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.

21 nov. 2011 21:38:12
Comentarii

dacă te uiți în wp-includes/post.php funcția încorporată get_post_types() returnează același array global `$wp_post_types`. de ce creăm o funcție nouă când avem deja o funcție încorporată?

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

O soluție mai elegantă:

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

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