什么是自定义文章类型?Post(文章)和Page(页面)是wordpress内置的两种文章类型,Post用于发布日常文章,Page用于固定页面,除此之外新增加的文章类型就是自定义文章类型,比如给wordpress企业网站增加一个单独发布产品的地方,这个地方就是新增加的文章类型Post Type。
创建一个新的自定义文章类型需要使用register_post_type函数来注册,在主题的 functions.php 文件下调用该函数:
1 | register_post_type( $post_type, $args ); |
$post_type参数就是自定义文章类型的名称;$args参数用于自定义文章类型的功能,因为可以自定义的功能很多,所以通常会用下面这种格式来注册:
1 2 3 4 5 | function my_custom_post_product() { $args = array(); register_post_type( 'product', $args ); } add_action( 'init', 'my_custom_post_product' ); |
包裹在一个函数中,定义一个数组,然后挂靠到 init 这个 action 上。这样 WordPress 在初始化的时候,就会执行这个函数注册一个自定义文章类型,因为调用register_post_type()的时候,必须要在 admin_menu action 之前,在 after_setup_theme action 之后,所以这里最好挂靠到 init action 上。
参数很多,为了写教程方便,只列出比较常用的参数,大体结构如下,更多参数可以前往generatewp参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function my_custom_post_product() { $labels = array( 'name' => _x( 'products', 'post type 名称' ), 'singular_name' => _x( 'product', 'post type 单个 item 时的名称,因为英文有复数' ), 'add_new' => _x( '增加产品', '添加新内容的链接名称' ), 'add_new_item' => __( '增加一个产品' ), 'edit_item' => __( '编辑产品' ), 'new_item' => __( '新产品' ), 'all_items' => __( '所有产品' ), 'view_item' => __( '查看产品' ), 'search_items' => __( '搜索产品' ), 'not_found' => __( '没有找到有关产品' ), 'not_found_in_trash' => __( '回收站里面没有相关产品' ), 'parent_item_colon' => '', 'menu_name' => 'Products' ); $args = array( 'labels' => $labels, 'description' => '我们网站的产品信息', 'public' => true, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ), 'has_archive' => true ); register_post_type( 'product', $args ); } add_action( 'init', 'my_custom_post_product' ); |
edit.php?post_type=page‘remove_meta_box()和add_meta_box()时调用的函数将上面代码加到主题 functions.php 的最下面,进入后台会发现多出了 “产品” 选项,这样表示注册成功,点击“增加产品”就可以像文章一样发布产品了。
还没有添加自定义分类法的自定义文章类型和Page文章类型一样,没有归档列表页面,那么要如何实现调用所有的自定义文章类型的文章列表呢?方法是通过页面模板来实现。
1、创建一个php文件,命名为products.php,然后把主题的archive.php文件的代码复制到products.php文件,在products.php文件第一行添加以下代码:
1 2 3 4 5 | <?php /* Template Name:产品中心 */ ?> |
2、在products.php文件中找到以下代码:
1 | <?php if (have_posts()) : ?> |
在该代码上边添加以下代码:
1 | <?php $wp_query = new WP_Query('post_type=product&caller_get_posts=1&order=DESC&posts_per_page=10&paged='.$paged); ?> |
其中post_type=product表示要调用的自定义文章类型;posts_per_page=10每页显示10个;
找到<?php endif; ?>代码,在其下边添加代码:
1 | <?php wp_reset_query(); ?> |
3、进入后台——页面——新建页面,标题输入“产品中心”,右侧页面属性的“模板”中选择“产品中心”,然后发布页面即可。
wordpress内部有一个很好的机制用来自定义文章类型的外观,一般文章(post)对应的模板文件是single.php,而自定义文章类型的模板文件则是single-[post_type].php,为了简便起见,将single.php复制一份并命名为single-product.php即可。
如果对内容显示有要求,可以根据自己的需求对single-product.php文件进行设计。
参考:http://blog.wpjam.com/article/wordpress-post-type/
PS:以前博客吧转载过一篇创建自定义文章类型的教程,但是教程过于简洁,因此重新整理编辑发布了本篇教程。