创建一个新的 Post Type 需要使用 register_post_type 函数注,在你主题的 functions.php 文件下调用该函数:
register_post_type( $post_type, $args );//$post_type 参数就是你自定义 Post Type 的名称。function my_custom_post_product() {$args = array();register_post_type( \'product\', $args );}add_action( \'init\', \'my_custom_post_product\' );register_post_type( $post_type, $args ); //$post_type 参数就是你自定义 Post Type 的名称。 function my_custom_post_product() { $args = array(); register_post_type( \'product\', $args ); } add_action( \'init\', \'my_custom_post_product\' );
参数很多,为了写教程方便,只列出比较常用的参数,大体结构如下:
function my_custom_post_site() {$labels = array(\'name\' => _x( \'网址导航\', \'post type 名称\' ),\'singular_name\' => _x( \'网址\', \'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\' => \'网址\');$args = array(\'labels\' => $labels,\'description\' => \'网址信息\',\'public\' => true,\'menu_position\' => 5,\'supports\' => array( \'title\', \'editor\', \'thumbnail\', \'excerpt\', \'comments\' ),\'has_archive\' => true);register_post_type( \'site\', $args );}add_action( \'init\', \'my_custom_post_site\' );function my_custom_post_site() { $labels = array( \'name\' => _x( \'网址导航\', \'post type 名称\' ), \'singular_name\' => _x( \'网址\', \'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\' => \'网址\' ); $args = array( \'labels\' => $labels, \'description\' => \'网址信息\', \'public\' => true, \'menu_position\' => 5, \'supports\' => array( \'title\', \'editor\', \'thumbnail\', \'excerpt\', \'comments\' ), \'has_archive\' => true ); register_post_type( \'site\', $args ); } add_action( \'init\', \'my_custom_post_site\' );
将上面代码加到主题 functions.php
的最下面,进入后台你会发现多出了 site
选项,这样表示注册成功:
这时候我们可以新建 site
发表一篇电影类型的文章了。但是这样与文章类型基本相同,我们需要更多的自定义来完善我们的 site
类型。
添加分类功能需要使用函数 register_taxonomy,使用方法也很简单,跟注册 Post Type 函数类似,只不过多了一个参数用来指定对应的 Post Type :
register_taxonomy( $taxonomy, $object_type, $args );register_taxonomy( $taxonomy, $object_type, $args );
就本例而言,可以配置如下常用参数:
function my_taxonomies_site() {$labels = array(\'name\' => _x( \'网址分类\', \'taxonomy 名称\' ),\'singular_name\' => _x( \'网址分类\', \'taxonomy 单数名称\' ),\'search_items\' => __( \'搜索网址分类\' ),\'all_items\' => __( \'所有网址分类\' ),\'parent_item\' => __( \'该网址分类的上级分类\' ),\'parent_item_colon\' => __( \'该网址分类的上级分类:\' ),\'edit_item\' => __( \'编辑网址分类\' ),\'update_item\' => __( \'更新网址分类\' ),\'add_new_item\' => __( \'添加新的网址分类\' ),\'new_item_name\' => __( \'新网址分类\' ),\'menu_name\' => __( \'网址分类\' ),);$args = array(\'labels\' => $labels,\'hierarchical\' => true,);register_taxonomy( \'sitecat\', \'site\', $args );}add_action( \'init\', \'my_taxonomies_site\', 0 );function my_taxonomies_site() { $labels = array( \'name\' => _x( \'网址分类\', \'taxonomy 名称\' ), \'singular_name\' => _x( \'网址分类\', \'taxonomy 单数名称\' ), \'search_items\' => __( \'搜索网址分类\' ), \'all_items\' => __( \'所有网址分类\' ), \'parent_item\' => __( \'该网址分类的上级分类\' ), \'parent_item_colon\' => __( \'该网址分类的上级分类:\' ), \'edit_item\' => __( \'编辑网址分类\' ), \'update_item\' => __( \'更新网址分类\' ), \'add_new_item\' => __( \'添加新的网址分类\' ), \'new_item_name\' => __( \'新网址分类\' ), \'menu_name\' => __( \'网址分类\' ), ); $args = array( \'labels\' => $labels, \'hierarchical\' => true, ); register_taxonomy( \'sitecat\', \'site\', $args ); } add_action( \'init\', \'my_taxonomies_site\', 0 );
添加到主题之后,我们看到出现了熟悉的文章分类功能,只不过上面的文案全部变成我们自定义的内容了:
为 Post Type 添加自定义 Meta Box
我们想要添加的电影类型不能仅仅只有正文内容,我们还需要额外添加一些 导演 之类的有关内容。那么就需要添加自定义 Meta Box,Meta Box 可以在文章发表页面中添加自定义的表单,编写文章的时候可以填写额外的信息然后在前端调用出来。
自定义 Meta Box 需要用到 add_meta_box 函数:
add_meta_box( $id, $title, $callback, $post_type, $context,$priority, $callback_args );add_meta_box( $id, $title, $callback, $post_type, $context,$priority, $callback_args );
我们注册一个 Meta Box :
add_action( \'add_meta_boxes\', \'site_director\' );function site_director() {add_meta_box(\'site_director\',\'网址链接\',\'site_director_meta_box\',\'site\',\'side\',\'low\');}add_action( \'add_meta_boxes\', \'site_director\' ); function site_director() { add_meta_box( \'site_director\', \'网址链接\', \'site_director_meta_box\', \'site\', \'side\', \'low\' ); }
然后在配置参数里面指定了回调函数 site
_director_meta_box
,我们需要在这个函数里面创建表单:
function site_director_meta_box($post) {// 创建临时隐藏表单,为了安全wp_nonce_field( \'site_director_meta_box\', \'site_director_meta_box_nonce\' );// 获取之前存储的值$value = get_post_meta( $post->ID, \'_site_director\', true );?><label for=\"site_director\"></label><input type=\"text\" id=\"site_director\" style=\"width:100%\" name=\"site_director\" value=\"<?php echo esc_attr( $value ); ?>\" placeholder=\"输入网址链接\" ><?php}add_action( \'save_post\', \'site_director_save_meta_box\' );function site_director_save_meta_box($post_id){// 安全检查// 检查是否发送了一次性隐藏表单内容(判断是否为第三者模拟提交)if ( ! isset( $_POST[\'site_director_meta_box_nonce\'] ) ) {return;}// 判断隐藏表单的值与之前是否相同if ( ! wp_verify_nonce( $_POST[\'site_director_meta_box_nonce\'], \'site_director_meta_box\' ) ) {return;}// 判断该用户是否有权限if ( ! current_user_can( \'edit_post\', $post_id ) ) {return;}// 判断 Meta Box 是否为空if ( ! isset( $_POST[\'site_director\'] ) ) {return;}$site_director = sanitize_text_field( $_POST[\'site_director\'] );update_post_meta( $post_id, \'_site_director\', $site_director );}function site_director_meta_box($post) { // 创建临时隐藏表单,为了安全 wp_nonce_field( \'site_director_meta_box\', \'site_director_meta_box_nonce\' ); // 获取之前存储的值 $value = get_post_meta( $post->ID, \'_site_director\', true ); ?> <label for=\"site_director\"></label> <input type=\"text\" id=\"site_director\" style=\"width:100%\" name=\"site_director\" value=\"<?php echo esc_attr( $value ); ?>\" placeholder=\"输入网址链接\" > <?php } add_action( \'save_post\', \'site_director_save_meta_box\' ); function site_director_save_meta_box($post_id){ // 安全检查 // 检查是否发送了一次性隐藏表单内容(判断是否为第三者模拟提交) if ( ! isset( $_POST[\'site_director_meta_box_nonce\'] ) ) { return; } // 判断隐藏表单的值与之前是否相同 if ( ! wp_verify_nonce( $_POST[\'site_director_meta_box_nonce\'], \'site_director_meta_box\' ) ) { return; } // 判断该用户是否有权限 if ( ! current_user_can( \'edit_post\', $post_id ) ) { return; } // 判断 Meta Box 是否为空 if ( ! isset( $_POST[\'site_director\'] ) ) { return; } $site_director = sanitize_text_field( $_POST[\'site_director\'] ); update_post_meta( $post_id, \'_site_director\', $site_director ); }
添加自定义字段:
add_action(\"manage_posts_custom_column\", \"site_custom_columns\");add_filter(\"manage_edit-site_columns\", \"site_edit_columns\");function site_custom_columns($column){global $post;switch ($column) {case \"site_director\":echo get_post_meta( $post->ID, \'_site_director\', true );break;}}function site_edit_columns($columns){$columns[\'site_director\'] = \'网址\';return $columns;}add_action(\"manage_posts_custom_column\", \"site_custom_columns\"); add_filter(\"manage_edit-site_columns\", \"site_edit_columns\"); function site_custom_columns($column){ global $post; switch ($column) { case \"site_director\": echo get_post_meta( $post->ID, \'_site_director\', true ); break; } } function site_edit_columns($columns){ $columns[\'site_director\'] = \'网址\'; return $columns; }
显示 Meta Box 内容
echo \'网址:\'.get_post_meta( get_the_ID(), \'_site_director\', true );echo \'网址:\'.get_post_meta( get_the_ID(), \'_site_director\', true );
调用 WP_Query 高度自定义调用 Post Type 的内容
$args = array( \'post_type\' => \'site\', \'posts_per_page\' => 10 );$loop = new WP_Query( $args );while ( $loop->have_posts() ) : $loop->the_post();the_title();echo \'<div class=\"entry-content\">\';the_content();echo \'</div>\';endwhile;$args = array( \'post_type\' => \'site\', \'posts_per_page\' => 10 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); the_title(); echo \' <div class=\"entry-content\">\'; the_content(); echo \'</div>\'; endwhile;
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
源码资源库 » WordPress PostType(自定义文章类型)功能介绍
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
源码资源库 » WordPress PostType(自定义文章类型)功能介绍