自定义文章类型

开发自定义插件的一个常见用途是利用 WordPress 文章 API 来创建自定义文章类型。

构建在线书店

假设你正在构建一个在线书店,并且想要存储待售书籍的数据。

WordPress 核心文章 API 允许你注册自定义文章类型。这些自定义文章类型扩展了核心的 post 数据类型,该类型存储在 WordPress 数据库的 posts 表中。

自定义文章类型的一个例子是 page 数据类型,它由 WordPress 核心注册。

使用 WordPress 文章 API,你可以创建一个自定义文章类型来存储书籍信息。

当你正确注册自定义文章类型时,WordPress 会自动为你的自定义文章类型创建一个新的管理菜单项,以及用于管理数据的管理页面。

自定义文章类型

要注册自定义文章类型,你需要使用 WordPress 的 register_post_type 函数。

WordPress 开发者文档中的函数参考页面可以看出,这个函数接受两个参数:自定义文章类型的名称,以及一个定义自定义文章类型的参数数组。

参数是你在函数定义中定义的变量名称。在这个例子中,参数是作为字符串变量的名称和一个参数数组。

当你使用这个函数时,你传入这些参数的值。这些值被称为参数值。

下面是一个创建参数数组并调用 register_post_type 函数,传入相关参数值来创建书籍自定义文章类型的示例。

$args = array(
    'labels' => array(
            'name'          => '书籍',
            'singular_name' => '书籍',
            'menu_name'     => '书籍',
            'add_new'       => '添加新书',
            'add_new_item'  => '添加新书',
            'new_item'      => '新书',
            'edit_item'     => '编辑书籍',
            'view_item'     => '查看书籍',
            'all_items'     => '所有书籍',
    ),
    'public' => true,
    'has_archive' => true,
    'show_in_rest' => true,
    'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt' ),
);

register_post_type( 'book', $args );

让我们看看如何在插件中实现这段代码。

实现书籍自定义文章类型

首先,按照你在“什么是插件”课程中学到的方式创建一个新插件。

wp-content/plugins 目录中添加一个名为 bookstore 的目录。

然后在该目录中创建一个名为 bookstore.php 的新 PHP 文件。

在文件中,添加 PHP 开始标签和插件头部信息到文件顶部,同时添加 ABSPATH 检查以防止直接访问文件。

<?php
/**
 * 插件名称: Bookstore
 * 插件描述: 一个用于管理书籍的插件
 * 版本: 1.0
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // 如果直接访问则退出
}

接下来,创建一个名为 bookstore_register_book_post_type 的函数,用于注册自定义文章类型。创建参数数组,然后调用 register_post_type 函数,传入相关参数值来创建书籍自定义文章类型。

function bookstore_register_book_post_type() {
     $args = array(
        'labels' => array(
            'name'          => '书籍',
            'singular_name' => '书籍',
            'menu_name'     => '书籍',
            'add_new'       => '添加新书',
            'add_new_item'  => '添加新书',
            'new_item'      => '新书',
            'edit_item'     => '编辑书籍',
            'view_item'     => '查看书籍',
            'all_items'     => '所有书籍',
        ),
        'public' => true,
        'has_archive' => true,
        'show_in_rest' => true,
        'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt' ),
    );

    register_post_type( 'book', $args );
}

注意函数名中使用了 bookstore_ 前缀。

这是为函数名添加前缀以避免与其他插件或主题冲突的一个例子。

你可以在插件开发者手册的插件最佳实践页面中了解更多关于此方法以及其他防止函数冲突的方法。

最后一步是调用 bookstore_register_book_post_type 函数。你需要将其挂载到 init 动作上才能实现。

如果你跳过了关于 WordPress 钩子的模块,钩子是一种在 WordPress 请求生命周期中的特定点运行代码的方式。

add_action( 'init', 'bookstore_register_book_post_type' );

你的最终代码应该如下所示:

<?php
/**
 * 插件名称:书店
 * 描述:一个用于管理书籍的插件
 * 版本:1.0
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // 防止直接访问
}

add_action( 'init', 'bookstore_register_book_post_type' );
function bookstore_register_book_post_type() {
    $args = array(
        'labels' => array(
            'name'          => '书籍',
            'singular_name' => '书籍',
            'menu_name'     => '书籍',
            'add_new'       => '添加新书',
            'add_new_item'  => '添加新书',
            'new_item'      => '新书',
            'edit_item'     => '编辑书籍',
            'view_item'     => '查看书籍',
            'all_items'     => '所有书籍',
        ),
        'public' => true,
        'has_archive' => true,
        'show_in_rest' => true,
        'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt' ),
    );

    register_post_type( 'book', $args );
}

现在,进入你的 WordPress 仪表盘并激活该插件。

你应该会在管理菜单中看到一个新的菜单项“书籍”,并且能够为你的自定义书籍文章类型添加新书。

如果你浏览 WordPress 数据库中的 wp_posts 表,会看到一个新行,其中 post_type 列设置为 book,并包含新书的数据。

自定义文章类型与性能

需要注意的是,注册过多的自定义文章类型可能会对 WordPress 网站的性能产生影响。

这是因为自定义文章类型的注册过程会在每次网站请求时执行,即使该页面并未使用该自定义文章类型。

因此,要谨慎使用自定义文章类型,并考虑何时使用它们,何时创建自定义表来存储自定义数据。

你可以在插件开发者手册的“使用插件创建表”页面中了解更多关于创建和使用自定义表的信息。

在插件开发者学习路径中,你也会学到更多相关内容。

进一步阅读

要了解更多关于自定义文章类型及其注册方法,请访问插件开发者手册中的“文章类型”页面。

同时,建议阅读 WordPress 开发者文档中完整的 register_post_type 函数参考页面,其中包含所有可传递给该函数的参数及其作用的完整列表。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注