当前浏览:首页 / WordPress函数 / get_post_types()

get_post_types( array|string $args = array(), string $output = 'names', string $operator = 'and' )

获取所有已注册文章类型对象的列表

post_type 文章类型more...


描述

另见


参数

$args

(array|string)(可选) key => value 数组参数,要与文章类型对象匹配。

默认值: array()

$output

(string)(可选) 要返回的输出类型。接受文章类型'names'或'objects'。

默认值: 'names'

$operator

(string)(可选) 要执行的逻辑操作。'or'表示数组中只有一个元素需要匹配;'and'表示所有元素必须匹配;'not'表示没有元素可以匹配。

默认值: 'and'


返回

(string[]|WP_Post_Type[]) 文章类型名称或对象的数组。



源码

查看源码 官方文档


更新日志

版本描述
2.9.0开始引入

使用示例

  • 示例1

    $args的参数值包括:

    • public – 布尔值。如果为true,则只返回公共文章类型。
    • publicly_queryable – 布尔值
    • exclude_from_search – 布尔值
    • show_ui – 布尔值
    • capability_type
    • hierarchical
    • menu_position
    • menu_icon
    • permalink_epmask
    • rewrite
    • query_var
    • show_in_rest – 布尔值。如果为true,将返回REST API白名单中的文章类型
    • _builtin – 布尔值。如果为真,它将返回WordPress默认的文章类型。使用false仅返回自定义文章类型。
  • 示例2

    仅输出公共的自定义文章类型列表
    通过将'_builtin'设置为false,我们排除了WordPress内置的公共文章类型(post, page, attachment, revision, 和 nav_menu_item),并仅检索已注册的自定义公共文章类型。

    <?php
    $args = array(
       'public'   => true,
       '_builtin' => false
    );
     
    $output = 'names'; // 'names' or 'objects' (default: 'names')
    $operator = 'and'; // 'and' or 'or' (default: 'and')
     
    $post_types = get_post_types( $args, $output, $operator );
     
    if ( $post_types ) { // If there are any custom public post types.
     
        echo '<ul>';
     
        foreach ( $post_types  as $post_type ) {
            echo '<li>' . $post_type . '</li>';
        }
     
        echo '<ul>';
     
    }
    ?>
  • 示例3

    获取文章类型形式:name => singular name

    function prefix_get_post_types() {
        $post_types = get_post_types([], 'objects');
        $posts = array();
        foreach ($post_types as $post_type) {
            $posts[$post_type->name] = $post_type->labels->singular_name;
        }
        return $posts;
    }

    您可以在“选择”下拉选项中使用此功能,用户可以从现有的文章类型中选择文章类型。

  • 示例4

    检索命名的文章类型作为对象
    此示例使用'object'输出检索名为“movies”的文章类型,并显示其名称、单数名称和菜单图标(URL):

    <?php
    $args = array(
     	'name' => 'movies',
    );
    
    $post_types = get_post_types( $args, 'objects' );
    
    foreach ( $post_types  as $post_type ) {
       echo '<p>Custom Post Type name: ' . $post_type->name . "<br />\n";
       echo 'Single name: ' . $post_type->labels->singular_name . "<br />\n";
       echo 'Menu icon URL: ' . $post_type->menu_icon . "</p>\n";;
    }
    ?>
  • 示例5

    显示文章类型的HTML下拉列表。

    <?php
    // Get post types
    $args       = array(
    	'public' => true,
    );
    $post_types = get_post_types( $args, 'objects' );
    ?>
    
    <select class="widefat" name="post_type">
        <?php foreach ( $post_types as $post_type_obj ):
            $labels = get_post_type_labels( $post_type_obj );
            ?>
            <option value="<?php echo esc_attr( $post_type_obj->name ); ?>"><?php echo esc_html( $labels->name ); ?></option>
        <?php endforeach; ?>
    </select>
    
  • 示例6

    输出所有已注册文章类型的名称列表
    使用'names'作为$output参数值。

    <?php
    
    $post_types = get_post_types( '', 'names' ); 
    
    echo '<ul>';
    	
    foreach ( $post_types as $post_type ) {
    
       echo '<li>' . $post_type . '</li>';
    }
    
    echo '</ul>';
    ?>
  • 示例7

    删除特定的文章类型

    $post_types = get_post_types( array( 'public' => true, '_builtin' => true ), 'names', 'and' );
    // remove attachment from the list
    unset( $post_types['attachment'] );
    echo '<ul>';
    foreach ( $post_types  as $post_type ) {
        echo '<li>' . $post_type . '</li>';
    }
    echo '</ul>';
    
  • 示例8

    显示文章类型的HTML下拉列表,包括自定义文章类型

    <?php
    $post_types = get_post_types(array('public' => true), 'names', 'and');
    ?>
    <select name="post_type">
      <?php
    
      foreach ($post_types  as $post_type) {
      ?>
        <option value="<?php echo esc_attr($post_type); ?>"><?php echo esc_html($post_type); ?></option>
      <?php
      }
      ?>
    </select>
    ?>
    
  • 示例9

    默认用法
    检索所有内置和自定义post类型的名称(在数组中)。

    <?php $post_types = get_post_types(); ?>