1. <div id="11111"></div>

    1. <div id="11111"></div>

      1. <div id="11111"></div>

        全代码实现WordPress分类目录和标签添加新的自定义字段

        日期: 标签:WordPress教程 36 条留言
        如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我
        文章目录

        WordPress的分类目录默认只有名称、别名、父节点和描述这几个字段,有时候我们需要给分类目录拓展一些信息,如想添加一个分类封面图、给分类指定keywords和description等等,这个时候我们就得给分类目录添加自定义字段(或者叫自定义栏目)。本文将给你介绍如何给WordPress的分类目录和标签添加新的自定义字段。

        下图是WordPress后台的分类目录编辑页面,有心的读者可能注意到,这里多了个分类封面的输入框,这个就是我们所说的给分类目录添加的自定义字段。

        编辑分类

        插件实现

        本文介绍的重点不是插件,但是如果你不会写代码,或者喜欢更方便的插件,推荐下面几款插件:

        全代码实现分类加字段

        将下面的PHP代码复制粘贴到你当前主题的 function.php 中即可。以下代码只给分类目录添加自定义字段,如果需要给标签添加自定义字段,请看文章后面的讲解。

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

        所有自定义字段保存在WordPress的_options表中,无需建新的表。

        <?php
        
        class Ludou_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( "ludou_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( "ludou_taxonomy_$t_id", $term_meta );
         
                } // if isset( $_POST['term_meta'] )
            } // save_tax_meta
         
        } // Ludou_Tax_Image
         
        $wptt_tax_image = new Ludou_Tax_Image();

        如果需要在主题中调用分类自定义字段的值,可以使用以下代码:

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

        全代码实现标签加字段

        给标签添加自定义字段的原理是一样的,只需把上面第一部分代码中的action修改一下即可,将以上代码中的:

        // 新建分类页面添加自定义字段输入框
        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 );

        改成:

        // 其实就是把 category 改成 post_tag 即可
        add_action( 'post_tag_add_form_fields', array( $this, 'add_tax_image_field' ) );
        add_action( 'post_tag_edit_form_fields', array( $this, 'edit_tax_image_field' ) );
        
        add_action( 'edited_post_tag', array( $this, 'save_tax_meta' ), 10, 2 );
        add_action( 'create_post_tag', array( $this, 'save_tax_meta' ), 10, 2 );

        另外,也可以同时给分类目录和标签添加自定义字段:

        // 分类
        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 );
        
        
        // 标签
        add_action( 'post_tag_add_form_fields', array( $this, 'add_tax_image_field' ) );
        add_action( 'post_tag_edit_form_fields', array( $this, 'edit_tax_image_field' ) );
        add_action( 'edited_post_tag', array( $this, 'save_tax_meta' ), 10, 2 );
        add_action( 'create_post_tag', array( $this, 'save_tax_meta' ), 10, 2 );

        参考自:WP Theme Tutorial

        -- 完 --

        本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
        原文出处:露兜博客 http://www.szeverich.net.cn/adding-custom-meta-to-wordpress-taxonomies.html
        露兜
        kaapass@outlook.com  QQ 825533758

        业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

        36 条留言

        点此留言
        1 2 773
        1. grantchao

          可以用Advanced Custom Fields这个插件来做的,很方便,而且可以自定义很多类型的字段,比如文字,文本段,选项,相关文章,图片,文件等等,可以看一下这篇文章的详细介绍http://wp-diary.com/?p=89

        1 2

        发表留言

        可以挣钱的游戏 118| 852| 700| 531| 261| 487| 298| 530| 493| 496| 420| 838| 533| 471| 593| 886| 542| 133| 979| 669| 832| 810| 999| 479| 19| 414| 433| 532| 26| 980| 93| 344| 109| 374| 783| 9|