你在这里
首页 > Wordpress > 【源码】WordPress 自定义文章类型、自定义文章类型建立分类功能

【源码】WordPress 自定义文章类型、自定义文章类型建立分类功能

wordpress

功能说明

WordPress 是一个非常灵活的网站系统,它的每一个节都是可定制的。本文介绍如何开发 WordPress 最强大的功能之一:自定义文章类型(Custom Post Types)。

到底什么是 自定义文章类型?

假如你想为你的博客添加一个单独的部分来发表电影评论。通过使用 自定义文章类型,你可以创建一种新的文章类型,就像文章(posts)和页面(pages)一样,它可以包含一组不同的数据。比如新的管理菜单、专门的编辑页面、自定义分类 和 更多实用的发布管理功能。

自定义文字类型 拥有新的文章管理选项,就像默认的文章类型(文章、页面、附件 )一样。一种 自定义文章类型 可以存储各种各样的信息。它有专门的编辑器、多媒体上传 并使用WordPress现有的表结构,便于数据管理。使用 WordPress 的 API 来创建自定义文章类型的主要优点在于,它可以很好地兼容现有的主题模板。同时,自定义文章类型也非常符合 SEO,因为它们拥有自己的漂亮的固定链接样式。

开发思路

主要是通过 WordPress 的 register_post_type 函数实现自定义文章类型,通过 register_taxonomy 函数实现给自定义的文章类型增加分类功能。

实现步骤

1、创建自定义文章类型插件

在 WordPress 中单独创建一个自定义文章类型插件。打开你的WordPress插件目录/wp-content/plugins,创建一个名为 applab_collector 的新目录。

打开 applab_collector 目录,创建一个名为 applab_collector.php 的PHP文件。

2、创建自定义文章类型函数

add_action( 'init', 'create_applab_collector' );//注册自定义文章函数

create_applab_collector 要与下面的函数声明一致。

function create_applab_collector() {}

在 create_applab_collector 中 调用 register_post_type 函数。

register_post_type 函数只要发出声明,它就为一个新的自定义文章类型准备好了各种WordPress管理功能。这个函数包括两个参数:第一个是定义了自定义文章类型的名字 name,第二个是一个数组,定义新的自定义文章类型的属性。

在这里,它的另一个的数组,包含不同的标签,用来显示这个自定义文章类型的不同部分,例如 ”name“会在仪表盘中显示这个自定义文章类型 的名字,”edit“和”view“将显示”编辑“和”查看“按钮。其他的也就非常容易理解了。

其中可以通过 menu_icon 来设置自定义文章类型的图标

'menu_icon' => 'dashicons-desktop',

dashicons 图标库是 WordPress 的专用开发素材,可以直接在代码中调用。 https://developer.wordpress.org/resource/dashicons/#media-default

register_post_type 函数有很多属性,可以在 WordPress 帮助文档中查看https://codex.wordpress.org/Function_Reference/register_post_type

3、创建自定义文章类型的分类功能

声明一个分类功能的函数

function create_applabGenre_taxonomy() {}

在创建好之后,要调用这个函数。

add_action( 'init', 'create_applabGenre_taxonomy', 0 );

调用 register_taxonomy 函数实现分类功能,其中中间数组的参数变量要与 register_post_type 函数中的变量名称要一致。

register_taxonomy('genre',array('ApplabCollector'), array([]){}

源码:

/*
Plugin Name: App Lab Collector
Plugin URI: http://applab.fun/
Description: Declares a plugin that will create a custom post type displaying App recommendations.
Version: 1.0
Author: Gregary Yang
Author URI: http://applab.fun/
License: GPLv2
*/


add_action( 'init', 'create_applab_collector' );


//添加功能函数
function create_applab_collector() {
    register_post_type( 'ApplabCollector',
        array(
            'labels' => array(
                'name' => '应用实验室',
                'singular_name' => '应用实验室',
                'add_new' => '新增',
                'add_new_item' => '新增应用推介',
                'edit' => '编辑',
                'edit_item' => '编辑应用推介',
                'new_item' => '新应用推介',
                'view' => '查看',
                'view_item' => '查看应用推介',
                'search_items' => '查找应用推介',
                'not_found' => '没有找到该应用',
                'not_found_in_trash' => '回收站里没有找到相关应用',
                'parent' => '父应用'
            ),
 
            'public' => true,
            'menu_position' => 15,
            'menu_position'=>5,
			
            'supports' => array(
            'title',
            'author', 
            'excerpt',
            'thumbnail',
            'trackbacks',
            'editor', 
            'comments',
            'custom-fields',
            'revisions' ) ,
			
            'taxonomies' => array(
            'genre',
            'post_tag'),
      
			
            'menu_icon' => 'dashicons-desktop',
            'has_archive' => true
        )
    );
}


function create_applabGenre_taxonomy() {
  $labels = array(
         'name' => _x( '应用推介分类', 'taxonomy general name' ),
         'singular_name' => _x( 'genre', 'taxonomy singular name' ),
         'search_items' =>  __( '搜索分类' ),
         'all_items' => __( '全部分类' ),
         'parent_item' => __( '父级分类目录' ),
         'parent_item_colon' => __( '父级分类目录:' ),
         'edit_item' => __( '编辑应用推介分类' ), 
         'update_item' => __( '更新' ),
         'add_new_item' => __( '添加新应用推介分类' ),
         'new_item_name' => __( 'New Genre Name' ),
  ); 
  register_taxonomy('genre',array('ApplabCollector'), array(
         'hierarchical' => true,
         'labels' => $labels,
         'show_ui' => true,
         'query_var' => true,
         'rewrite' => array( 'slug' => 'genre' ),
  ));
}
add_action( 'init', 'create_applabGenre_taxonomy', 0 );

?>
anyShare分享到:
Ethan
Ethan
我不生产软件,我只是好用、有趣的软件搬运工!也许还是一个蹩脚解说员。

发表评论

Top