Obține lista tipurilor de postări personalizate înregistrate

5 nov. 2014, 07:03:42
Vizualizări: 31.8K
Voturi: 9

Cum pot obține o listă cu toate tipurile de postări personalizate înregistrate și să le afișez pe orice pagină template.

Am un cod care arată astfel.

<?php

    /**
     * Template Name: Lista Tipuri de Postări Personalizate
     */

    get_header();

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

    $output = 'names'; // names sau objects, names este implicit
    $operator = 'and'; // 'and' sau '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
Comentarii

Codul tău funcționează corect. Tocmai l-am testat. Nu ai înregistrat niciun tip de postare personalizat care să fie public și exclude_from_search, de aceea afișează un rezultat gol. Încearcă să elimini ambele argumente și vezi dacă pagina listează toate tipurile de postări implicite sau nu.

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

Încearcă exemplul din codex pentru a te asigura că acestea apar la toate http://codex.wordpress.org/Function_Reference/get_post_types#Examples

iyrin iyrin
5 nov. 2014 07:56:14
Toate răspunsurile la întrebare 5
0
12

Codul tău arată bine. Totuși, poți încerca următoarele coduri pentru a obține toate postările personalizate:

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

    $output = 'names'; // nume sau obiecte, implicit este 'names'
    $operator = 'and'; // 'and' sau 'or'

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

    foreach ( $post_types  as $post_type ) {
       echo '<p>' . $post_type . '</p>';
    }

    ?>

De asemenea, poți folosi o serie de argumente pentru a filtra rezultatele mai detaliat. Pentru o listă detaliată a argumentelor, poți consulta pagina oficială WordPress Codex: https://codex.wordpress.org/Function_Reference/get_post_types

8 mai 2016 00:51:50
0

Dacă dorești să obții toate tipurile de postări ca o listă, trebuie să folosești funcția get_post_types și să parcurgi rezultatele cu un foreach.

<?php
    // Obține Toate Tipurile de Postări ca Listă
    foreach ( get_post_types( '', 'names' ) as $post_type ) {
        echo '<p>'.$post_type.'</p>';
    }
?>

Aceste 2 linii de cod pot lista toate tipurile de postări înregistrate. Dacă dorești să afli mai multe despre această funcție get_post_types, vizitează pagina oficială din wp codex: https://codex.wordpress.org/Function_Reference/get_post_types

11 ian. 2018 13:21:25
0
global $wp_post_types;

$posttypes = array_keys( $wp_post_types );

// Elimină _builtins sau alte tipuri nedorite
$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 aug. 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( 'Nu există clienți în taxonomia de terapie!', 'text-domain' );
endif;
?>

Când este apelat noul WP_Query, sunt preluați clienții relevanți și putem parcurge lista lor. În buclă afișăm simplu titlul și conținutul clientului într-o listă simplă.

11 ian. 2018 13:35:38
0

Codul tău este corect. Problema ta este în momentul executării ambelor acțiuni:

  1. Înregistrarea CPT (Custom Post Type)
  2. Apelarea funcției de tip post pe care ai scris-o.

Ai una din cele 2 soluții:

Soluția 1:

Asigură-te că CPT-ul tău este înregistrat cu o prioritate mai mare înainte de a apela funcția get_post_types.

Soluția 2:

Redu prioritatea funcției get_post_types astfel încât să pornească după ce CPT-ul este înregistrat.

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

Sper că acest lucru te ajută.

Mulțumesc

9 iul. 2020 19:20:29