在用一些主题的使用过程中,我们经常可以看到有些插件在文章的编辑页面插入了自定义文章字段编辑面板,比如我使用过的付费下载插件Erphpdown,编辑页面如下图所示。

WordPress – 为文章添加自定义字段,在文章编辑页面增加编辑面板-StubbornHuang Blog

WordPress非常强大,假如我们不仅仅只满足发表文章,如果我们想做一个主题来展示电子书的信息,那么我们是不是需要在每一个文章中记录每一本电子书的书名、作者、ISBN、价格等等信息,那么这个时候我们就需要给文章添加meta_box,也就是自定义字段,使用文章的自定义字段去记录与书籍相关的信息。

在WordPress中为文章自定义字段,需要用到add_meta_box函数,其新增的信息会保存到数据库的wp_postmeta表中。

其示例界面如下:

WordPress – 为文章添加自定义字段,在文章编辑页面增加编辑面板-StubbornHuang Blog

1 add_meta_box

官方文档:https://developer.wordpress.org/reference/functions/add_meta_box/

函数形式

add_meta_box( string $id, string $title, callable $callback, string|array|WP_Screen $screen = null, string $context = 'advanced', string $priority = 'default', array $callback_args = null )

函数参数

  • $id:字段id,唯一
  • $title:meta_box的标题名称
  • $callback:回调函数
  • $post_type:需要添加的文章类型
  • $context:显示位置,可选normal、side、advanced,默认为normal
  • $priority:优先级,可选high、core、default,默认为default

2 添加自定义字段

按一下步骤,将下述的代码一步一步加入到主题的functions.php中。

2.1 创建所需要的字段信息

首先我们想要在文章新增三个自定义字段,分别是书籍作者、ISBN、价格。

数组第一个元素name为自定义字段的名称,在本代码中自定义字段的名称为name值加_value,以防止与其他代码发生冲突,如 _book_author_value;std为自定义字段的默认值,当你发表文章时该自定义字段没填任何值,那么将取默认值;title为自定义字段模块的标题,如文章编辑页的”摘要”、”分类”和”标签”,这些都是模块名称。

$new_meta_boxes = array(
    "book_author" => array(
        "name" => "_book_author",
        "std" => "这里填作者",
        "title" => "作者:"),

    "book_isbn" => array(
        "name" => "_book_isbn",
        "std" => "这里填书的ISBN索引号",
        "title" => "ISBN:"),

    "book_price" => array(
        "name" => "_book_price",
        "std" => "这里填书的价格",
        "title" => "价格:")
);

2.2 创建自定义字段输入框

以下代码将用于在文件编辑页面创建book的自定义meta_box与相关的输入框

function new_book_meta_boxes() {
    global $post, $new_meta_boxes;

    foreach($new_meta_boxes as $meta_box) {
        $meta_box_value = get_post_meta($post->ID, $meta_box['name'].'_value', true);

        if($meta_box_value == "")
           $meta_box_value = $meta_box['std'];

        // 自定义字段标题
        echo'<h3>'.$meta_box['title'].'</h3>';

        // 自定义字段输入框
        echo '<textarea cols="60" rows="3" name="'.$meta_box['name'].'_value">'.$meta_box_value.'</textarea><br />';
    }

    echo '<input type="hidden" name="book_metaboxes_nonce" id="book_metaboxes_nonce" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
}

2.3 在文章页面创建自定义字段模块

function create_book_meta_box() {
    if ( function_exists('add_meta_box') ) {
      add_meta_box( 'book-meta-boxes', '书籍信息', 'new_book_meta_boxes', 'post', 'normal', 'high' );
    }
}

add_action('admin_menu', 'create_book_meta_box');

2.4 保存自定义字段

function save_postdata( $post_id ) {
    global $new_meta_boxes;

    if ( !wp_verify_nonce( $_POST['book_metaboxes_nonce'], plugin_basename(__FILE__) ))
        return;

    // 用户权限验证
    if ( !current_user_can( 'edit_posts', $post_id ))
        return;

    foreach($new_meta_boxes as $meta_box) {
        $data = $_POST[$meta_box['name'].'_value'];

        if($data == "")
            delete_post_meta($post_id, $meta_box['name'].'_value', get_post_meta($post_id, $meta_box['name'].'_value', true));
        else
            update_post_meta($post_id, $meta_box['name'].'_value', $data);
     }
  }


add_action('save_post', 'save_postdata');

3 调用文章自定义字段

<?php
    if (is_single())
    {
        $book_author =  get_post_meta($post->ID, "_book_author_value", true);
        $book_isbn = get_post_meta($post->ID, "_book_isbn_value", true);
        $book_price = get_post_meta($post->ID, "_book_price_value", true);
    }
?>

总结

本文以一个实际的例子对如何在WordPress中为文章添加自定义字段进行了详细的说明,这对于WordPress初学者和WordPress主题开发者还有有一定的帮助的。

参考链接