问题描述

我想将自定义字段添加到类别。我的意思是当我创建一个我只有一个类别

名称:

弹头:

家长:

描述:

因为我有一个电视剧的网站,我想添加一些更多的领域,我想要这样的东西,当我创建一个新的类别 (类别=系列)

名称:

艺术家:

年:

类型:

类型:

概要:

弹头:

家长:

描述:

等等…

请帮忙吗提前致谢。

最佳解决方案

我发贴了一个星期前的一个例子 http://en.bainternet.info/2011/wordpress-category-extra-fields

希望这可以帮助。

辖。


以下是帖子的详细信息:

我们需要做的第一件事是使用钩子 edit_category_form_fields 将额外的字段添加到类别编辑表单中,我们使用一个简单的函数打印出额外的字段。

<?php
//add extra fields to category edit form hook
add_action ( 'edit_category_form_fields', 'extra_category_fields');

//add extra fields to category edit form callback function
function extra_category_fields( $tag ) {    //check for existing featured ID
    $t_id = $tag->term_id;
    $cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Image Url'); ?></label></th>
<td>
<input type="text" name="Cat_meta[img]" id="Cat_meta[img]" size="3" style="width:60%;" value="<?php echo $cat_meta['img'] ? $cat_meta['img'] : ''; ?>"><br />
        <span class="description"><?php _e('Image for category: use full url with '); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra1]" id="Cat_meta[extra1]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra1'] ? $cat_meta['extra1'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra2"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra2]" id="Cat_meta[extra2]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra2'] ? $cat_meta['extra2'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra3"><?php _e('extra field'); ?></label></th>
<td>
        <textarea name="Cat_meta[extra3]" id="Cat_meta[extra3]" style="width:60%;"><?php echo $cat_meta['extra3'] ? $cat_meta['extra3'] : ''; ?></textarea><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<?php
}

正如你所看到的,我添加了 4 个新的字段,并且它们都是一个数组 Cat_meta [key],因为我们只在选项表中创建一行,以保存每个字段的所有类别的额外字段,而不是一行。

接下来,一旦用户提交类别编辑表单,我们需要将额外的字段保存到数据库中,我们使用”edited_category”,使用可以通过每个提交的字段运行的函数,并使用 update_option 函数将它们插入数据库,例如这个:

<?php
// save extra category extra fields hook
add_action ( 'edited_category', 'save_extra_category_fileds');

// save extra category extra fields callback function
function save_extra_category_fileds( $term_id ) {
    if ( isset( $_POST['Cat_meta'] ) ) {
        $t_id = $term_id;
        $cat_meta = get_option( "category_$t_id");
        $cat_keys = array_keys($_POST['Cat_meta']);
            foreach ($cat_keys as $key){
            if (isset($_POST['Cat_meta'][$key])){
                $cat_meta[$key] = $_POST['Cat_meta'][$key];
            }
        }
        //save the option array
        update_option( "category_$t_id", $cat_meta );
    }
}

从上面的代码可以看出,我们添加的所有额外字段都存储在数据库的选项表中,名称为’category_ID’,其中 ID 是我们刚刚编辑的特定类别的 ID,这意味着我们可以调用这些数据我们的插件或主题文件容易使用 get_option 功能。

例如我的类别 ID 是 25,那么我的代码将会是这样的

<?php $cat_data = get_option('category_25'); ?>

正如我刚才所说,我需要为每个类别显示一个不同的图像,所以在这种情况下,我将这几行代码添加到我的主题的 category.php 后,显示类别标题的代码:

<?php
//first get the current category ID
$cat_id = get_query_var('cat');

//then i get the data from the database
$cat_data = get_option("category_$cat_id");

//and then i just display my category image if it exists
if (isset($cat_data['img'])){
    echo '<div class="category_image"><img src="'.$cat_data['img'].'"></div>';
}

尼斯和容易,我们都做完了。结果应该类似于:

次佳解决方案

从 Wordpress 4.4 开始,增加了 add_term_meta()update_term_meta()get_term_meta()功能。这意味着由 MxmastaMills 提供的代码可以更新,以便使用一个更少的黑客方法。

这是我的更新。只有一个字段,因为我想添加一个自定义标题,但它将对所有要添加的字段工作一样。

function addTitleFieldToCat(){
    $cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
    ?>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="cat_page_title"><?php _e('Category Page Title'); ?></label></th>
        <td>
        <input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
            <span class="description"><?php _e('Title for the Category '); ?></span>
        </td>
    </tr>
    <?php

}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');

function saveCategoryFields() {
    if ( isset( $_POST['cat_title'] ) ) {
        update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
    }
}
add_action ( 'edited_category', 'saveCategoryFields');

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。