Wordpress如何注册自定义文章类型:register_post_type详解和代码示例


register_post_type是WordPress主题开发常用的函数,该函数主要用于注册WordPress的文章类型。本篇文章主要讲解了register_post_type的作用和参数意义,以及展示register_post_type的代码示例。

register_post_type是WordPress主题开发常用的函数,该函数主要用于注册WordPress的文章类型。

本篇文章主要讲解了register_post_type的作用和参数意义,以及展示register_post_type的代码示例。

什么是WordPress的文章类型

通俗的讲,WordPress的文章类型就是WordPress不同文章的展现形式,WordPress文章类型的原理是通过给wp_posts表中的post_type字段添加不同字符来实现自定义文章类型。例如下面的图片,是我使用register_post_type函数注册的自定义文章类型。下面的商品、订单、说说、论坛、贴子等就是我使用WordPress的自定义文章类型注册的。

Wordpress如何注册自定义文章类型:register_post_type详解和代码示例

WordPress使用register_post_type注册自定义文章类型代码示例

使用register_post_type注册一个用于管理“书籍”的文章类型,该示例来自于WordPress官网。

将下面的代码放到WordPress主题的functions.php中即可生效。

/**
 * Register a custom post type called "book".
 *
 * @see get_post_type_labels() for label keys.
 */
function wpdocs_codex_book_init() {
    $labels = array(
        'name'                  => _x( '书籍', 'Post type general name', 'textdomain' ),
        'singular_name'         => _x( '书籍', 'Post type singular name', 'textdomain' ),
        'menu_name'             => _x( '书籍', 'Admin Menu text', 'textdomain' ),
        'name_admin_bar'        => _x( '书籍', 'Add New on Toolbar', 'textdomain' ),
        'add_new'               => __( '添加新书籍', 'textdomain' ),
        'add_new_item'          => __( '添加新书籍', 'textdomain' ),
        'new_item'              => __( '添加新书籍', 'textdomain' ),
        'edit_item'             => __( '编辑书籍', 'textdomain' ),
        'view_item'             => __( '查看书籍', 'textdomain' ),
        'all_items'             => __( '所有书籍', 'textdomain' ),
        'search_items'          => __( '搜索书籍', 'textdomain' ),
        'parent_item_colon'     => __( '父书籍:', 'textdomain' ),
        'not_found'             => __( '未发现任何书籍.', 'textdomain' ),
        'not_found_in_trash'    => __( '垃圾箱没有任何书籍.', 'textdomain' ),
        'featured_image'        => _x( '书籍封面', 'Overrides the “Featured Image” phrase for this post type. Added in 4.3', 'textdomain' ),
        'set_featured_image'    => _x( '设置书籍封面', 'Overrides the “Set featured image” phrase for this post type. Added in 4.3', 'textdomain' ),
        'remove_featured_image' => _x( '移除书籍封面', 'Overrides the “Remove featured image” phrase for this post type. Added in 4.3', 'textdomain' ),
        'use_featured_image'    => _x( '设置为封面', 'Overrides the “Use as featured image” phrase for this post type. Added in 4.3', 'textdomain' ),
        'archives'              => _x( '书籍归档', 'The post type archive label used in nav menus. Default “Post Archives”. Added in 4.4', 'textdomain' ),
        'insert_into_item'      => _x( '插入到书籍', 'Overrides the “Insert into post”/”Insert into page” phrase (used when inserting media into a post). Added in 4.4', 'textdomain' ),
        'uploaded_to_this_item' => _x( '上传该书籍', 'Overrides the “Uploaded to this post”/”Uploaded to this page” phrase (used when viewing media attached to a post). Added in 4.4', 'textdomain' ),
        'filter_items_list'     => _x( '筛选书籍', 'Screen reader text for the filter links heading on the post type listing screen. Default “Filter posts list”/”Filter pages list”. Added in 4.4', 'textdomain' ),
        'items_list_navigation' => _x( '书籍导航', 'Screen reader text for the pagination heading on the post type listing screen. Default “Posts list navigation”/”Pages list navigation”. Added in 4.4', 'textdomain' ),
        'items_list'            => _x( '书籍列表', 'Screen reader text for the items list heading on the post type listing screen. Default “Posts list”/”Pages list”. Added in 4.4', 'textdomain' ),
    );

    $args = array(
        'labels'             => $labels,
        //是否公开
        'public'             => true,
        //是否可查询
        'publicly_queryable' => true,
        //显示在后台菜单中
        'show_ui'            => true,
        //显示在后台菜单中
        'show_in_menu'       => true,
        //是否可以查询,和publicly_queryable一起使用
        'query_var'          => true,
        //重写url
        'rewrite'            => array( 'slug' => 'book' ),
        //该文章类型的权限
        'capability_type'    => 'post',
        //是否有归档
        'has_archive'        => true,
        //是否水平,如果水平就是页面,否则类似文章这种可以有分类目录(需要自定义分类目录)
        'hierarchical'       => false,
        //菜单定位
        'menu_position'      => null,
        //该文章类型支持的功能
        'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
    );

    register_post_type( 'book', $args );
}

add_action( 'init', 'wpdocs_codex_book_init' );

效果如下:

Wordpress如何注册自定义文章类型:register_post_type详解和代码示例

其中,register_post_type中的第一个参数"book"是post_type字段的值,这个值是可以随意更换的,但是记住不要和WordPress已存在的post_type的值重复。使用get_post_types函数可以打印出WordPress内置的文章类型。

不要使用以下值注册WordPress自定义文章类型。

这些是WordPress内置的文章类型。所以不要使用下面的值做为post_type的值。

post
page
attachment
revision
nav_menu_item
custom_css
customize_changeset
oembed_cache
user_request
wp_block

WordPress如何在前台展示自定义文章类型

如果你想展示自定义文章类型,在WordPress主题中你可以使用single-{custom_post_type}.php这样的文件格式。例如,上面注册了一个post_type值为book的自定义文章类型,那么你就可以使用single-book.php做为该文章的详情页。

你可以在single-book.php加上wp_title函数即可显示出该自定义文章类型的标题(这里只是做一个简单的解释):

<h1><?php wp_title();?></h1>

效果如下:

Wordpress如何注册自定义文章类型:register_post_type详解和代码示例

如果你看不到效果,那么请重新启用主题。

关于如何使用register_post_type注册WordPress自定义文章类型的详细解释就到这里。有问题欢迎加微信互相交流。



评论

{{ errors.content }}

Enter+Ctrl