Ottenere la lista dei tipi di post personalizzati registrati

5 nov 2014, 07:03:42
Visualizzazioni: 31.8K
Voti: 9

Come posso ottenere un elenco di tutti i tipi di post personalizzati registrati e mostrarli in qualsiasi pagina template.

Ho un codice come questo.

<?php

    /**
     * Nome Template: Lista Tipi di Post Personalizzati
     */

    get_header();

    $args=array(
        'public'                => true,
        'exclude_from_search'   => false,
        '_builtin'              => false
    ); 

    $output = 'names'; // names o objects, nota che names è il valore predefinito
    $operator = 'and'; // 'and' oppure 'or'
    $post_types = get_post_types($args,$output,$operator);

    $posttypes_array = array();

    foreach ($post_types  as $post_type ) {
        $posttypes_array[] = $post_type;
    }

    echo "<pre>";
    print_r($posttypes_array);
    echo "</pre>";

    get_footer();

?>
2
Commenti

Il tuo codice funziona bene. L'ho appena testato. Non hai nessun custom post type registrato che sia public e exclude_from_search, ecco perché mostra un risultato vuoto. Prova a rimuovere entrambi questi argomenti e vedi se la pagina elenca tutti i post type di default o meno?

Robert hue Robert hue
5 nov 2014 07:17:41

Prova l'esempio del codex per assicurarti che vengano visualizzati http://codex.wordpress.org/Function_Reference/get_post_types#Examples

iyrin iyrin
5 nov 2014 07:56:14
Tutte le risposte alla domanda 5
0
12

Il tuo codice sembra corretto. Tuttavia, puoi provare i seguenti codici per ottenere tutti i post personalizzati:

    $args = array(
       'public'   => true,
       '_builtin' => false,
    );

    $output = 'names'; // names o objects, nota che names è il valore predefinito
    $operator = 'and'; // 'and' o 'or'

    $post_types = get_post_types( $args, $output, $operator ); 

    foreach ( $post_types  as $post_type ) {

       echo '<p>' . $post_type . '</p>';
    }

    ?>

Puoi anche utilizzare diversi argomenti per filtrare maggiormente il tuo risultato. Per la lista completa degli argomenti puoi consultare la pagina ufficiale del Codex di WordPress: https://codex.wordpress.org/Function_Reference/get_post_types

8 mag 2016 00:51:50
0

Se vuoi ottenere tutti i tipi di post come un elenco, devi usare la funzione get_post_types e iterare sui risultati con un foreach.

<?php
    // Ottieni tutti i tipi di post come elenco
    foreach ( get_post_types( '', 'names' ) as $post_type ) {
        echo '<p>'.$post_type.'</p>';
    }
?>

Queste 2 righe di codice possono elencare tutti i tuoi tipi di post registrati. Se vuoi saperne di più su questa funzione get_post_types visita la pagina ufficiale del codex di wp: https://codex.wordpress.org/Function_Reference/get_post_types

11 gen 2018 13:21:25
0
global $wp_post_types;

$posttypes = array_keys( $wp_post_types );

// Rimuovi i tipi di post predefiniti o altri
$pt_remove = array("attachment","nav_menu_item","customize_changeset","revision");

foreach ( $posttypes as $posttype ):

 if ( in_array($posttype, $pt_remove) ) continue;

 $posttype_names[ $posttype ] = $posttype;

endforeach;

echo "<pre>";
 print_r($posttype_names);
echo "</pre>";
29 ago 2017 06:53:27
0
<?php
$args = array(
  'post_type'   => 'clients',
  'post_status' => 'publish',
  'tax_query'   => array(
    array(
        'taxonomy' => 'clients_service',
        'field'    => 'slug',
        'terms'    => 'therapy'
    )
  )
 );

$testimonials = new WP_Query( $args );
if( $testimonials->have_posts() ) :
?>
  <ul>
    <?php
      while( $testimonials->have_posts() ) :
        $testimonials->the_post();
        ?>
          <li><?php printf( '%1$s - %2$s', get_the_title(), get_the_content() );  ?></li>
        <?php
      endwhile;
      wp_reset_postdata();
    ?>
  </ul>
<?php
else :
  esc_html_e( 'Nessun cliente nella tassonomia terapia!', 'text-domain' );
endif;
?>

Quando viene chiamato il nuovo WP_Query, vengono recuperati i clienti rilevanti e possiamo iterare attraverso di essi. Nel ciclo semplicemente mostriamo il titolo e il contenuto del cliente in una semplice lista.

11 gen 2018 13:35:38
0

Il tuo codice è corretto. Il problema sta nel momento in cui vengono eseguiti entrambi:

  1. La registrazione del CPT (Custom Post Type)
  2. La chiamata alla funzione del tipo di post che hai scritto.

Hai due possibili soluzioni:

Soluzione 1:

Assicurati che il tuo CPT sia registrato con una priorità più alta prima di chiamare la funzione get_post_types.

Soluzione 2:

Riduci la priorità di get_post_types in modo che parta dopo che il CPT è stato registrato.

add_action('init', 'nome_tua_funzione', 10);

Spero che questo ti aiuti.

Grazie

9 lug 2020 19:20:29