| 
	什么是自定义文章类型?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' ); |  
	参数介绍:
	
		labels – (数组,可选) 用来配置文章类型显示在后台的一些描述性文字,默认为空。(上面代码中,为了清晰所以单独拿出来创建了一个数组 $labels)
		description-一些简短的介绍文字
		public-(布尔值),用于定义publicly_queriable, show_ui, show_in_nav_menus and exclude_from_search的值
		publicly_queryable- (布尔值)可以从前台获取的变量(从url中,比如url重写)
		exclude_from_search – (布尔值),是否能够被搜索到
		show_ui –  (布尔值)是否生成一个默认的管理页面,也就是是否在后台有管理页面。默认跟public的是一样
		show_in_menu –  是否在后台菜单项中显示,如果为ture,那么show_ui的值也必须设置为true,将会有一个顶级菜单项。还可以为一个字符串,类似’tools.php’ 或者’edit.php?post_type=page‘
		menu_position – 在后台菜单中的位置。
		menu_icon – 菜单的icon图标(一个url)。
		capability_type – 查看、编辑、删除的能力类型(capability),默认为post
		capabilities – (数组,一般人用不到)
		map_meta_cap – (布尔值),只有设置了capabilities才用的上
		hierarchical – (布尔值),文章是否有层级关系,也就是是否允许有父级文章。
		supports – (数组),对文章类型的一些功能支持,如设置参数:’title’-标题;’editor’ (content) – 内容编辑器;’author’ – 作者;’thumbnail’ – 特色图像,主题还得支持特色图像才行;’excerpt’ – 摘要;’trackbacks’;’custom-fields’-自定义字段;’comments’ – 评论;’revisions’ – 修订版;’page-attributes’ – 页面属性,类似page,选择页面模板的那个
		register_meta_box_cb – 当执行remove_meta_box()和add_meta_box()时调用的函数
		taxonomies – 添加已经注册了的分类法(比如默认的分类、标签)
		permalink_epmask
		has_archive – 文章是否有归档,就是一个所有文章归档页面。
		rewrite – (布尔值或者数组),是否有url重写,设置为false的话将会防止url重写,关于重写以后教程详细讲解。
		query_var – url重写会用到
		can_export – 是否输出
		show_in_nav_menus – 是否出现在设置菜单页面的选项中
		_builtin – wordpress开发人员建议你不要使用这个参数哦。
		_edit_link –  wordpress开发人员建议你不要使用这个参数哦 
	将上面代码加到主题 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即可。 |