本文关键词:
wordpree自定义文章类型,wordpress自定义分类法,wordpress新增自定义文章类型,wordpress新增自定义分类法
前言
我是kekc,一个PHP爱好者,也是一个wordpress爱好者,喜欢折腾,喜欢分享原创,欢迎大家礼貌转载。本人开发过wordpress插件、主题。在开发过程中,我经常新增自定义文章类型和自定义分类法。之前也曾分享过类似的代码,但是在这里我进行了一下封装。至于什么是自定义文章类型,就是新增一个像wordpress文章一样;至于什么是分类法,就像wordpress文章下面的分类、标签一样。网上大部分将新建wordpress分类法叫做新建wordpress分类,我现在认为是不正确的,我而且在我之前的代码分享中,也是叫的分类。
由于我经常使用,所以就简单封装了一下,让大家简单、快速的新增自己的自定义文章类型和自定义分类法。
我封装的代码如下:
<?php
/*
* Author: KEKC
* Author URI: https://www.kekc.cn
*/
/**
* 注册自定义文章类型
*/
function custom_post_init() {
//预置参数
$custom_post_type_array = array(//注册自定义文章类型
array(
"post_type_Name" => '文章类型一',//文章名称
"post_type_NameEn" =>'posttype1'//文章英文名,不能含有大写字母
),
array(
"post_type_Name" => '文章类型二',
"post_type_NameEn" =>'posttype2'
),
);
$taxArray = array(//注册自定义分类法
array(
"taxName" => '分类一',//分类法名称
"taxNameEn" =>'taxSlu1',//分类法英文名
"post_type" =>'posttype1',//挂载到所属的文章类型,对应post_type_NameEn,默认的是post
),
array(
"taxName" => '分类二',
"taxNameEn" =>'taxSlu2',
"post_type" =>'posttype2',
),
);
//预置参数
foreach ($custom_post_type_array as $custom_post_type) {//新建自定义文章类型
$labels = array(
'name' => _x( $custom_post_type['post_type_Name'], 'Post type general name', 'textdomain' ),
'singular_name' => _x( $custom_post_type['post_type_Name'], 'Post type singular name', 'textdomain' ),
'menu_name' => _x( $custom_post_type['post_type_Name'], 'Admin Menu text', 'textdomain' ),
'name_admin_bar' => _x( $custom_post_type['post_type_Name'], 'Add New on Toolbar', 'textdomain' ),
'add_new' => __( '新增', 'textdomain' ),
'add_new_item' => __( '添加新'.$custom_post_type['post_type_Name'], 'textdomain' ),
'new_item' => __( '新'.$custom_post_type['post_type_Name'], 'textdomain' ),
'edit_item' => __( '修改'.$custom_post_type['post_type_Name'], 'textdomain' ),
'view_item' => __( '查看'.$custom_post_type['post_type_Name'], 'textdomain' ),
'all_items' => __( '所有'.$custom_post_type['post_type_Name'], 'textdomain' ),
'search_items' => __( '搜素'.$custom_post_type['post_type_Name'], 'textdomain' ),
'parent_item_colon' => __( ''.$custom_post_type['post_type_Name'].'的上级:', 'textdomain' ),
'not_found' => __( '没有找到'.$custom_post_type['post_type_Name'], 'textdomain' ),
'not_found_in_trash' => __( '没有在回收站中找到'.$custom_post_type['post_type_Name'], '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( $custom_post_type['post_type_Name'].'归档', 'The post type archive label used in nav menus. Default “Post Archives”. Added in 4.4', 'textdomain' ),
'insert_into_item' => _x( '插入到'.$custom_post_type['post_type_Name'], '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( '上传至'.$custom_post_type['post_type_Name'], '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( '筛选'.$custom_post_type['post_type_Name'].'列表', '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( $custom_post_type['post_type_Name'].'列表导航', '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( $custom_post_type['post_type_Name'].'列表', 'Screen reader text for the items list heading on the post type listing screen. Default “Posts list”/”Pages list”. Added in 4.4', 'textdomain' ),
'item_published' => $custom_post_type['post_type_Name']."已发布。",
'item_published_privately'=>$custom_post_type['post_type_Name']."已私密发布。",
'item_reverted_to_draft' =>$custom_post_type['post_type_Name']."已恢复为草稿。",
'item_scheduled' =>$custom_post_type['post_type_Name']."已排入发布计划。",
'item_updated' =>$custom_post_type['post_type_Name']."已更新。",
'item_link' =>$custom_post_type['post_type_Name']."链接。",
'item_link_description' =>"目标".$custom_post_type['post_type_Name']."的链接。"
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => $custom_post_type['post_type_NameEn'] ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
);
register_post_type( $custom_post_type['post_type_NameEn'], $args );
}
foreach ($taxArray as $tax) {//新建自定义 tax 分类法
$labels = array(
'name' => _x( $tax['taxName'], 'taxonomy general name', 'textdomain' ),
'singular_name' => _x( $tax['taxName'], 'taxonomy singular name', 'textdomain' ),
'search_items' => __( '搜素'.$tax['taxName'], 'textdomain' ),
'all_items' => __( '所有'.$tax['taxName'], 'textdomain' ),
'view_item' => __( '查看'.$tax['taxName'], 'textdomain' ),
'parent_item' => __( $tax['taxName'].'上级', 'textdomain' ),
'parent_item_colon' => __( $tax['taxName'].'的上级:', 'textdomain' ),
'edit_item' => __( '修改'.$tax['taxName'], 'textdomain' ),
'update_item' => __( '更新'.$tax['taxName'], 'textdomain' ),
'add_new_item' => __( '添加新的'.$tax['taxName'], 'textdomain' ),
'new_item_name' => __( '新的'.$tax['taxName'].'名称', 'textdomain' ),
'not_found' => __( '没有找到相关的'.$tax['taxName'], 'textdomain' ),
'back_to_items' => __( '返回'.$tax['taxName'], 'textdomain' ),
'menu_name' => __( $tax['taxName'], 'textdomain' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'genre' ),
'show_in_rest' => true,
);
register_taxonomy( $tax['taxNameEn'].'taxonomy', $tax['post_type'], $args );
}
}
add_action( 'init', 'custom_post_init' );
怎么自定义,主要是修改上方的预置参数,也就是下面的:
//预置参数
$custom_post_type_array = array(//注册自定义文章类型
array(
"post_type_Name" => '文章类型一',//文章名称
"post_type_NameEn" =>'posttype1'//文章英文名,不能含有大写字母
),
array(
"post_type_Name" => '文章类型二',
"post_type_NameEn" =>'posttype2'
),
);
$taxArray = array(//注册自定义分类法
array(
"taxName" => '分类一',//分类名称
"taxNameEn" =>'taxSlu1',//分类英文名
"post_type" =>'posttype1',//挂载到所属的文章类型,对应post_type_NameEn,默认的是post
),
array(
"taxName" => '分类二',
"taxNameEn" =>'taxSlu2',
"post_type" =>'posttype2',
),
);
//预置参数
如何使用(两种方式):
1、将修改好的代码放入主题文件夹下functions.php
2、将修改好的代码设置为插件,示例如下:
将下方代码新建文件,保存至wordpress插件目录,比如我的我保存到了/wp-content/plugins/nav_type_posts/index.php
<?php
/*
* Plugin Name: 注册自定义文章类型、自定义分类
* Plugin URI: https://www.dift.cn
* Description: 添加自定义的导航类文章类型和分类
* Version: 1.0.0
* Author: KEKC
* Author URI: https://www.kekc.cn
*/
//你的代码放在下面
/**
* 注册自定义文章类型
*/
function custom_post_init() {
//预置参数
$custom_post_type_array = array(//注册自定义文章类型
array(
"post_type_Name" => '文章类型一',//文章名称
"post_type_NameEn" =>'posttype1'//文章英文名,不能含有大写字母
),
array(
"post_type_Name" => '文章类型二',
"post_type_NameEn" =>'posttype2'
),
);
$taxArray = array(//注册自定义分类
array(
"taxName" => '分类一',//分类名称
"taxNameEn" =>'taxSlu1',//分类英文名
"post_type" =>'posttype1',//挂载到所属的文章类型,对应post_type_NameEn,默认的是post
),
array(
"taxName" => '分类二',
"taxNameEn" =>'taxSlu2',
"post_type" =>'posttype2',
),
);
//预置参数
foreach ($custom_post_type_array as $custom_post_type) {//新建自定义文章类型
$labels = array(
'name' => _x( $custom_post_type['post_type_Name'], 'Post type general name', 'textdomain' ),
'singular_name' => _x( $custom_post_type['post_type_Name'], 'Post type singular name', 'textdomain' ),
'menu_name' => _x( $custom_post_type['post_type_Name'], 'Admin Menu text', 'textdomain' ),
'name_admin_bar' => _x( $custom_post_type['post_type_Name'], 'Add New on Toolbar', 'textdomain' ),
'add_new' => __( '新增', 'textdomain' ),
'add_new_item' => __( '添加新'.$custom_post_type['post_type_Name'], 'textdomain' ),
'new_item' => __( '新'.$custom_post_type['post_type_Name'], 'textdomain' ),
'edit_item' => __( '修改'.$custom_post_type['post_type_Name'], 'textdomain' ),
'view_item' => __( '查看'.$custom_post_type['post_type_Name'], 'textdomain' ),
'all_items' => __( '所有'.$custom_post_type['post_type_Name'], 'textdomain' ),
'search_items' => __( '搜素'.$custom_post_type['post_type_Name'], 'textdomain' ),
'parent_item_colon' => __( ''.$custom_post_type['post_type_Name'].'的上级:', 'textdomain' ),
'not_found' => __( '没有找到'.$custom_post_type['post_type_Name'], 'textdomain' ),
'not_found_in_trash' => __( '没有在回收站中找到'.$custom_post_type['post_type_Name'], '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( $custom_post_type['post_type_Name'].'归档', 'The post type archive label used in nav menus. Default “Post Archives”. Added in 4.4', 'textdomain' ),
'insert_into_item' => _x( '插入到'.$custom_post_type['post_type_Name'], '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( '上传至'.$custom_post_type['post_type_Name'], '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( '筛选'.$custom_post_type['post_type_Name'].'列表', '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( $custom_post_type['post_type_Name'].'列表导航', '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( $custom_post_type['post_type_Name'].'列表', 'Screen reader text for the items list heading on the post type listing screen. Default “Posts list”/”Pages list”. Added in 4.4', 'textdomain' ),
'item_published' => $custom_post_type['post_type_Name']."已发布。",
'item_published_privately'=>$custom_post_type['post_type_Name']."已私密发布。",
'item_reverted_to_draft' =>$custom_post_type['post_type_Name']."已恢复为草稿。",
'item_scheduled' =>$custom_post_type['post_type_Name']."已排入发布计划。",
'item_updated' =>$custom_post_type['post_type_Name']."已更新。",
'item_link' =>$custom_post_type['post_type_Name']."链接。",
'item_link_description' =>"目标".$custom_post_type['post_type_Name']."的链接。"
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => $custom_post_type['post_type_NameEn'] ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
);
register_post_type( $custom_post_type['post_type_NameEn'], $args );
}
foreach ($taxArray as $tax) {//新建自定义 tax 分类
$labels = array(
'name' => _x( $tax['taxName'], 'taxonomy general name', 'textdomain' ),
'singular_name' => _x( $tax['taxName'], 'taxonomy singular name', 'textdomain' ),
'search_items' => __( '搜素'.$tax['taxName'], 'textdomain' ),
'all_items' => __( '所有'.$tax['taxName'], 'textdomain' ),
'view_item' => __( '查看'.$tax['taxName'], 'textdomain' ),
'parent_item' => __( $tax['taxName'].'上级', 'textdomain' ),
'parent_item_colon' => __( $tax['taxName'].'的上级:', 'textdomain' ),
'edit_item' => __( '修改'.$tax['taxName'], 'textdomain' ),
'update_item' => __( '更新'.$tax['taxName'], 'textdomain' ),
'add_new_item' => __( '添加新的'.$tax['taxName'], 'textdomain' ),
'new_item_name' => __( '新的'.$tax['taxName'].'名称', 'textdomain' ),
'not_found' => __( '没有找到相关的'.$tax['taxName'], 'textdomain' ),
'back_to_items' => __( '返回'.$tax['taxName'], 'textdomain' ),
'menu_name' => __( $tax['taxName'], 'textdomain' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'genre' ),
'show_in_rest' => true,
);
register_taxonomy( $tax['taxNameEn'].'taxonomy', $tax['post_type'], $args );
}
}
add_action( 'init', 'custom_post_init' );
展示示例:
如何调用
wordpress有自己的调用函数,你只需引入wp-load.php,就可以使用get_posts函数进行调用。比如我要调用我上面的文章类型一:
$args = array(
'numberposts' => 10,
'post_type' => 'posttype1'
);
$posts = get_posts( $args );
比如我要调用上面文章类型一下面的分类一分类法下面的某个分类:
$taxposts = get_posts( array(
'numberposts' => -1,
'post_type' => 'posttype1',//文章类型
'taxSlu1taxonomy' => $slugname,//分类法下新建的分类别名,也就是slug
'post_status' => 'publish',//文章状态为发布了的文章
) );
追加一个别人封装的
包括文章类型、标签、分类法
<?php
function news() {
$labels = array(
'name' => _x( 'News', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'News', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'News', 'text_domain' ),
'parent_item_colon' => __( 'Parent News:', 'text_domain' ),
'all_items' => __( 'All News', 'text_domain' ),
'view_item' => __( 'View News Info', 'text_domain' ),
'add_new_item' => __( 'Add New Article', 'text_domain' ),
'add_new' => __( 'Add News', 'text_domain' ),
'edit_item' => __( 'Edit News Info', 'text_domain' ),
'update_item' => __( 'Update News Info', 'text_domain' ),
'search_items' => __( 'Search News', 'text_domain' ),
'not_found' => __( 'Not found', 'text_domain' ),
'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ),
);
$rewrite = array(
'slug' => 'news',
'with_front' => true,
'pages' => true,
'feeds' => true,
);
$args = array(
'label' => __( 'News', 'text_domain' ),
'description' => __( 'Info News', 'text_domain' ),
'labels' => $labels,
'show_in_rest' => true, // To use Gutenberg editor.
'supports' => array( 'title', 'editor', 'thumbnail', 'comments'),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'menu_position' => 7,
'menu_icon' => 'dashicons-admin-post',
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'page',
'rewrite' => $rewrite,
);
register_post_type( 'news', $args );
}
add_action( 'init', 'news', 0 );
function news_tags_taxonomy() { $news_tags = array(
'name' => _x( 'News Tags', 'taxonomy general name' ),
'singular_name' => _x( 'News Tag', 'taxonomy singular name' ),
'search_items' => __( 'Search News Tags' ),
'popular_items' => __( 'Popular News Tags' ),
'all_items' => __( 'All News Tags' ),
'parent_item' => null,
'parent_item_colon' => null,
'edit_item' => __( 'Edit News Tag' ),
'update_item' => __( 'Update News Tag' ),
'add_new_item' => __( 'Add New News Tag' ),
'new_item_name' => __( 'New News Tag Name' ),
'separate_items_with_commas' => __( 'Separate News tags with commas' ),
'add_or_remove_items' => __( 'Add or remove News tags' ),
'choose_from_most_used' => __( 'Choose from the most used News tags' ),
'menu_name' => __( 'News Tags' ), );
register_taxonomy('news_tags','news', array(
'hierarchical' => false,
'labels' => $news_tags,
'show_ui' => true,
'show_in_rest' => true,
'show_admin_column' => true,
'update_count_callback' => '_update_post_term_count',
'query_var' => true,
'rewrite' => array(
'slug' => 'news_tags' ),
));
}
//add_action( 'init', 'news_tags_taxonomy', 0 );
function news_categories_taxonomy() {
$label = array(
'name' => _x( 'News Categories', 'taxonomy general name' ),
'singular_name' => _x( 'News Category',
'taxonomy singular name' ), 'search_items' => __( 'Search news Categories' ),
'all_items' => __( 'All News Categories' ),
'parent_item' => __( 'Parent News Category' ),
'parent_item_colon' => __( 'Parent News Category:' ),
'edit_item' => __( 'Edit News Category' ),
'update_item' => __( 'Update News Category' ),
'add_new_item' => __( 'Add New News Category' ),
'new_item_name' => __( 'New News Category' ),
'menu_name' => __( 'News Categories' ),
);
register_taxonomy(
'news_categories',array('news'), array(
'hierarchical' => true,
'labels' => $label,
'show_in_rest' => true,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'news_categories' ),
));
}
//add_action( 'init', 'news_categories_taxonomy', 0 );
function ex_themes_taxonomies_() {
// Add genres
$labels = array(
'name' => _x( 'Developer', 'taxonomy general name' ),
'singular_name' => _x( 'Developer', 'taxonomy singular name' ),
'search_items' => __( 'Search Developer' ),
'all_items' => __( 'All Developer' ),
'parent_item' => __( 'Parent Developer' ),
'parent_item_colon' => __( 'Parent Developer:' ),
'edit_item' => __( 'Edit Developer' ),
'update_item' => __( 'Update Developer' ),
'add_new_item' => __( 'Add New Developer' ),
'new_item_name' => __( 'New Developer Name' ),
'menu_name' => __( 'Developer' ),
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'developer' ),
);
register_taxonomy( 'developer', array( 'post' ), $args );
}
add_action( 'init', 'ex_themes_taxonomies_', 0 );
版权说明
本文属于kekc原创,博客网址:https://www.kekc.cn 。转载请留版权,谢谢。
访问KEKC博客(www.kekc.cn),查看更多wordpress、PHP开发代码。
© 版权声明
THE END
暂无评论内容