Получить список зарегистрированных произвольных типов записей

5 нояб. 2014 г., 07:03:42
Просмотры: 31.8K
Голосов: 9

Как получить список всех зарегистрированных произвольных типов записей и показать их на любой странице шаблона.

У меня есть такой код.

<?php

    /**
     * Template Name: Список произвольных типов записей
     */

    get_header();

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

    $output = 'names'; // names или objects, по умолчанию names
    $operator = 'and'; // 'and' или '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
Комментарии

Ваш код работает правильно. Я только что протестировал его. У вас нет ни одного пользовательского типа записи, который был бы public и exclude_from_search, поэтому результат пустой. Попробуйте убрать оба этих аргумента и посмотрите, будут ли отображаться все стандартные типы записей?

Robert hue Robert hue
5 нояб. 2014 г. 07:17:41

Попробуйте пример из кодекса, чтобы убедиться, что они вообще отображаются http://codex.wordpress.org/Function_Reference/get_post_types#Examples

iyrin iyrin
5 нояб. 2014 г. 07:56:14
Все ответы на вопрос 5
0
12

Ваш код выглядит хорошо. Однако, вы можете попробовать следующий код для получения всех пользовательских типов записей:

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

    $output = 'names'; // names или objects, по умолчанию используется names
    $operator = 'and'; // 'and' или 'or'

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

    foreach ( $post_types  as $post_type ) {

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

    ?>

Вы также можете использовать множество аргументов для более точной фильтрации результатов. Для получения полного списка аргументов вы можете посетить официальную страницу WordPress Codex: https://codex.wordpress.org/Function_Reference/get_post_types

8 мая 2016 г. 00:51:50
0

Если вам нужно получить все типы записей в виде списка, используйте функцию get_post_types и пройдитесь по результатам с помощью цикла foreach.

<?php
    // Получаем все типы записей в виде списка
    foreach ( get_post_types( '', 'names' ) as $post_type ) {
        echo '<p>'.$post_type.'</p>';
    }
?>

Эти две строки кода могут вывести список всех зарегистрированных типов записей. Если вы хотите узнать больше о функции get_post_types, посетите официальную страницу Codex WordPress: https://codex.wordpress.org/Function_Reference/get_post_types

11 янв. 2018 г. 13:21:25
0
global $wp_post_types;

$posttypes = array_keys( $wp_post_types );

// Удаляем встроенные типы записей и другие ненужные
$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 авг. 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( 'Нет клиентов в таксономии терапии!', 'text-domain' );
endif;
?>

Когда вызывается new WP_Query, извлекаются соответствующие клиенты, и мы можем пройтись по ним в цикле. В цикле мы просто выводим заголовок и содержимое клиента в виде простого списка.

11 янв. 2018 г. 13:35:38
0

Ваш код правильный. Проблема заключается в порядке выполнения двух действий:

  1. Регистрация CPT (Custom Post Type)
  2. Вызов функции вашего типа записи.

У вас есть два варианта решения:

Решение 1:

Убедитесь, что ваш CPT регистрируется с более высоким приоритетом, чем вызов функции get_post_types.

Решение 2:

Понизьте приоритет get_post_types, чтобы он выполнялся после регистрации CPT.

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

Надеюсь, это поможет.

Спасибо

9 июл. 2020 г. 19:20:29