创建新分类时添加自定义分类字段

时间:2011-09-23 作者:Dave Romsey

编辑:WordPress v4的重要注意事项。这个问题解决了旧版本的WordPress中缺少实词元的问题,但自WordPress v4发布以来。4.real term meta has been introduced, 这绝对是现在要走的路。

Here\'s a post that looks like a good starting point for term meta in WordPress 4.4+

我留下这个问题是因为它对处理旧代码的人仍然有用,但我想添加上面的注释,以便开发人员开始新的术语meta实现时能够走上正确的轨道。

End of edit


我能够利用this @Bainternet提供的超级教程,用于为分类添加自定义字段。我已经调整了标记,并添加了一个单独的回调,以向“添加新类别”管理页面添加字段。我的代码在这个问题的末尾。

不过,我遇到了一个抓住你的人;自定义字段输入显示在“添加新类别”页面上,但未保存该字段。

我注意到添加新分类法页面使用ajax,这可能是问题的一部分。我尝试禁用JS,但仍然遇到同样的问题。我一直在岩芯周围挖掘,寻找一个钩子,但找不到。网上有各种各样的教程,但它们似乎都依赖于分类法编辑屏幕来完成自己的任务。

有什么想法可以让这一切顺利进行吗?

/**
 * Add extra fields to custom taxonomy edit and add form callback functions
 */
// Edit taxonomy page
function extra_edit_tax_fields($tag) {
    // Check for existing taxonomy meta for term ID.
    $t_id = $tag->term_id;
    $term_meta = get_option( "taxonomy_$t_id" ); ?>
    <tr class="form-field">
    <th scope="row" valign="top"><label for="cat_Image_url"><?php _e( \'Category Navigation Image URL\' ); ?></label></th>
        <td>
            <input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta[\'img\'] ) ? esc_attr( $term_meta[\'img\'] ) : \'\'; ?>">
            <p class="description"><?php _e( \'Enter the full URL to the navigation image used for this category.\' ); ?></p>
        </td>
    </tr>
<?php
}
add_action( \'category_edit_form_fields\', \'extra_edit_tax_fields\', 10, 2 );

// Add taxonomy page
function extra_add_tax_fields( $tag ) {
    // Check for existing taxonomy meta for term ID.
    $t_id = $tag->term_id;
    $term_meta = get_option( "taxonomy_$t_id" ); ?>
    <div class="form-field">
        <label for="cat_Image_url"><?php _e( \'Category Navigation Image URL\' ); ?></label>
        <input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta[\'img\'] ) ? esc_attr( $term_meta[\'img\'] ) : \'\'; ?>">
        <p class="description"><?php _e( \'Enter the full URL to the navigation image used for this category.\' ); ?></p>
    </div>
<?php
}
add_action( \'category_add_form_fields\', \'extra_add_tax_fields\', 10, 2 );

// Save extra taxonomy fields callback function.
function save_extra_taxonomy_fields( $term_id ) {
    if ( isset( $_POST[\'term_meta\'] ) ) {
        $t_id = $term_id;
        $term_meta = get_option( "taxonomy_$t_id" );
        $cat_keys = array_keys( $_POST[\'term_meta\'] );
        foreach ( $cat_keys as $key ) {
            if ( isset ( $_POST[\'term_meta\'][$key] ) ) {
                $term_meta[$key] = $_POST[\'term_meta\'][$key];
            }
        }
        // Save the option array.
        update_option( "taxonomy_$t_id", $term_meta );
    }
}   
add_action( \'edited_category\', \'save_extra_taxonomy_fields\', 10, 2 );   
//add_action( \'...Can\'t find hook to enable saving custom fields when adding a new term

5 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

已解决!

add_action( \'create_category\', \'save_extra_taxonomy_fields\', 10, 2 );   
道具Category Meta plugin. 我从WP repo下载了各种类别的元插件,这个插件能够在add New屏幕上添加元数据。我仔细研究了代码,找到了难以捉摸的create{term}钩子。

SO网友:Aram Kocharyan

我认为您引用的教程非常好,我基于它编写了这段代码。它存储用于分类的元menu_category ,并将其显示在编辑表单中。选项表条目为taxomomy_24_metas 对于术语id 24。

add_action(\'menu_category_edit_form_fields\',\'menu_category_edit_form_fields\');
add_action(\'menu_category_add_form_fields\',\'menu_category_edit_form_fields\');
add_action(\'edited_menu_category\', \'menu_category_save_form_fields\', 10, 2);
add_action(\'created_menu_category\', \'menu_category_save_form_fields\', 10, 2);

function menu_category_save_form_fields($term_id) {
    $meta_name = \'order\';
    if ( isset( $_POST[$meta_name] ) ) {
        $meta_value = $_POST[$meta_name];
        // This is an associative array with keys and values:
        // $term_metas = Array($meta_name => $meta_value, ...)
        $term_metas = get_option("taxonomy_{$term_id}_metas");
        if (!is_array($term_metas)) {
            $term_metas = Array();
        }
        // Save the meta value
        $term_metas[$meta_name] = $meta_value;
        update_option( "taxonomy_{$term_id}_metas", $term_metas );
    }
}

function menu_category_edit_form_fields ($term_obj) {
    // Read in the order from the options db
    $term_id = $term_obj->term_id;
    $term_metas = get_option("taxonomy_{$term_id}_metas");
    if ( isset($term_metas[\'order\']) ) {
        $order = $term_metas[\'order\'];
    } else {
        $order = \'0\';
    }
?>
    <tr class="form-field">
            <th valign="top" scope="row">
                <label for="order"><?php _e(\'Category Order\', \'\'); ?></label>
            </th>
            <td>
                <input type="text" id="order" name="order" value="<?php echo $order; ?>"/>
            </td>
        </tr>
<?php 
}

SO网友:shishir mishra

您可以通过以下挂钩将自定义字段添加到添加新术语页面屏幕:

  1. {taxonomy_name}_添加表单字段{taxonomy_name}_编辑表单字段_{taxonomy_name}{taxonomy_name}

enter image description here

SO网友:xlad

add_filter(\'created_term\', \'update_{custom_taxonomy}_fields\'); // you can name your callback function  as you like
function update_{custom_taxonomy}_fields($term_id) {
    if($_POST[\'taxonomy\'] == \'{custom_taxonomy}\'): // a simple check to see if is you tax
        //do your update (I prefer in options table, but you can do it in any way you`d like)
    endif;
}
如果您想要一个更通用的钩子,可以使用“created\\u term”(至少来自3.4)

SO网友:Dipesh KC

你可以选择taxonomy mangager 插件。您可以添加新的分类法,还可以向所选分类法添加自定义字段(例如图像字段)

结束

相关推荐

List custom taxonomy terms

我正在尝试显示自定义分类法的所有术语(characters), 分类法与自定义帖子类型相关(books).我想做的是显示characters, 比如说我有两个books, 我加了三个characters 致各book, 我想显示所有六个字符。我只想得到名称,而不是链接,或者列表形式,如果我可以得到一组对象或一个更可取的数组。非常感谢。