wordpress知识库
网站首页 > 知识库 > wordpress知识 >

wordpress分类添加自定义字段的全部方法

2012/10/15

WordPress的分类目录默许只包括名称、别名、父节点和描绘等基本字段。但是,有时候咱们需要添加分类自定义字段,比如分类封面图、关键词和描绘等。为了完成这些功能,咱们需要为分类目录增加自定义字段(也称为自定义栏目)。

本文介绍的要点不是插件,可是如果你不会写代码,或许喜爱更便利的插件,推荐下面几款插件:

可以点击上面每款插件名抵达下载地址。下面是用代码来实现分类自定义字段的方法:

<?php

class Diy_Tax_Image{

    function __construct(){

        // 新建分类页面添加自定义字段输入框
        add_action( 'category_add_form_fields', array( $this, 'add_tax_image_field' ) );
        // 编辑分类页面添加自定义字段输入框
        add_action( 'category_edit_form_fields', array( $this, 'edit_tax_image_field' ) );

        // 保存自定义字段数据
        add_action( 'edited_category', array( $this, 'save_tax_meta' ), 10, 2 );
        add_action( 'create_category', array( $this, 'save_tax_meta' ), 10, 2 );


    } // __construct

    /**
     * 新建分类页面添加自定义字段输入框
     */
    public function add_tax_image_field(){
        ?>
        <div class="form-field">
            <label for="term_meta[tax_image]">分类封面</label>
            <input type="text" name="term_meta[tax_image]" id="term_meta[tax_image]" value="" />
            <p class="description">输入分类封面图片URL</p>
        </div><!-- /.form-field -->

        <!-- TODO: 在这里追加其他自定义字段表单,如: -->

        <!--
        <div class="form-field">
            <label for="term_meta[tax_keywords]">分类关键字</label>
            <input type="text" name="term_meta[tax_keywords]" id="term_meta[tax_keywords]" value="" />
            <p class="description">输入分类关键字</p>
        </div>
        -->
        <?php
    } // add_tax_image_field

    /**
     * 编辑分类页面添加自定义字段输入框
     *
     * @uses get_option()       从option表中获取option数据
     * @uses esc_url()          确保字符串是url
     */
    public function edit_tax_image_field( $term ){

        // $term_id 是当前分类的id
        $term_id = $term->term_id;

        // 获取已保存的option
        $term_meta = get_option( "diy_taxonomy_$term_id" );
        // option是一个二维数组
        $image = $term_meta['tax_image'] ? $term_meta['tax_image'] : '';

        /**
         *   TODO: 在这里追加获取其他自定义字段值,如:
         *   $keywords = $term_meta['tax_keywords'] ? $term_meta['tax_keywords'] : '';
         */
        ?>
        <tr class="form-field">
            <th scope="row">
                <label for="term_meta[tax_image]">分类封面</label>
            <td>
                <input type="text" name="term_meta[tax_image]" id="term_meta[tax_image]" value="<?php echo esc_url( $image ); ?>" />
                <p class="description">输入分类封面图片URL</p>
            </td>
            </th>
        </tr><!-- /.form-field -->

        <!-- TODO: 在这里追加其他自定义字段表单,如: -->

        <!--
        <tr class="form-field">
            <th scope="row">
                <label for="term_meta[tax_keywords]">分类关键字</label>
                <td>
                    <input type="text" name="term_meta[tax_keywords]" id="term_meta[tax_keywords]" value="<?php echo $keywords; ?>" />
                    <p class="description">输入分类关键字</p>
                </td>
            </th>
        </tr>
        -->

        <?php
    } // edit_tax_image_field

    /**
     * 保存自定义字段的数据
     *
     * @uses get_option()      从option表中获取option数据
     * @uses update_option()   更新option数据,如果没有就新建option
     */
    public function save_tax_meta( $term_id ){

        if ( isset( $_POST['term_meta'] ) ) {

            // $term_id 是当前分类的id
            $t_id = $term_id;
            $term_meta = array();

            // 获取表单传过来的POST数据,POST数组一定要做过滤
            $term_meta['tax_image'] = isset ( $_POST['term_meta']['tax_image'] ) ? esc_url( $_POST['term_meta']['tax_image'] ) : '';

            /**
             *   TODO: 在这里追加获取其他自定义字段表单的值,如:
             *   $term_meta['tax_keywords'] = isset ( $_POST['term_meta']['tax_keywords'] ) ? $_POST['term_meta']['tax_keywords'] : '';
             */

            // 保存option数组
            update_option( "diy_taxonomy_$t_id", $term_meta );

        } // if isset( $_POST['term_meta'] )
    } // save_tax_meta

}

$wptt_tax_image = new Diy_Tax_Image();

 

这部分代码包括 4 大块:调用WordPress的action;新建分类页面增加自定义字段输入框;修改分类页面增加自定义字段输入框;保存自定义字段的数据。这儿只创建一个分类封面的URL输入框。如果要增加更多的自定义字段,也只需在代码中几个 TODO 的位置上追加一些代码罢了,代码中也给出增加keywords字段的示例。

下面是添加完成后的效果,如下图所示:

分类添加的自定义字段效果

在前台调用的代码:

// $term_id 是当前分类的id,自行想办法获取
$term_id = $term->term_id;
         
// 获取已保存的option
$term_meta = get_option( "diy_taxonomy_$term_id" );
 
// 取值
$tax_image = $term_meta['tax_image'] ? $term_meta['tax_image'] : '';