如何在WordPress中干净地向自定义分类添加自定义字段

时间:2012-06-27 作者:csi

保存添加到分类中的额外字段。我想要最合适的&;这样做的有效方式。Where should I save the new fields?

2种可能的解决方案是

1) 使用此处描述的Wordpress选项表。。。Add Custom Fields to Custom Taxonomies. 这是公认的“不干净”,并被认为不是正确的答案。

// A callback function to save our extra taxonomy field(s)
function save_taxonomy_custom_fields( $term_id ) {
if ( isset( $_POST[\'term_meta\'] ) ) {
    $t_id = $term_id;
    $term_meta = get_option( "taxonomy_term_$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_term_$t_id", $term_meta );
}
}
2)按此处所述添加新表Custom Taxonomies in Wordpress 它遵循“wp\\uu”+customtaxonomykey+“meta”的命名约定。

3) 其他一些选项

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

选项2是最干净的方法,我也使用过多次。不幸的是,WordPress中还没有默认的term\\u元数据表。这篇文章也介绍了同样的方法,http://shibashake.com/wordpress-theme/add-term-or-taxonomy-meta-data

当然,这也有一个插件:)http://wordpress.org/extend/plugins/taxonomy-metadata/

SO网友:shishir mishra

You can save attachment id in options table and get to display that attachment

有三个主要功能可以为分类添加元框。通过以下挂钩调用:

  1. {taxonomy_name}_添加表单字段{taxonomy_name}_编辑表单字段_{taxonomy_name}{taxonomy_name}
在此,您可以使用任何预定义或自定义的分类法相应地更改分类法\\u名称。我正在使用“Woocommerce产品分类法”,并为其创建了一个插件。请查看以下函数以添加自定义字段:

{taxonomy\\u name}\\u add\\u form\\u fields添加新的自定义字段以添加新的术语页表单。在这里,我创建了一个字段来为term添加一个类。

在函数中添加以下代码。主题中的php

public function mj_taxonomy_add_custom_meta_field() {
            ?>
            <div class="form-field">
                <label for="term_meta[class_term_meta]"><?php _e( \'Add Class\', \'MJ\' ); ?></label>
                <input type="text" name="term_meta[class_term_meta]" id="term_meta[class_term_meta]" value="">
                <p class="description"><?php _e( \'Enter a value for this field\',\'MJ\' ); ?></p>
            </div>
        <?php
        }
    add_action( \'product_cat_add_form_fields\', \'mj_taxonomy_add_custom_meta_field\', 10, 2 );
{分类法\\u名称}\\u编辑\\u表单\\u字段在术语编辑页面上添加字段

public function mj_taxonomy_edit_custom_meta_field($term) {

        $t_id = $term->term_id;
        $term_meta = get_option( "taxonomy_$t_id" ); 
       ?>
        <tr class="form-field">
        <th scope="row" valign="top"><label for="term_meta[class_term_meta]"><?php _e( \'Add Class\', \'MJ\' ); ?></label></th>
            <td>
                <input type="text" name="term_meta[class_term_meta]" id="term_meta[class_term_meta]" value="<?php echo esc_attr( $term_meta[\'class_term_meta\'] ) ? esc_attr( $term_meta[\'class_term_meta\'] ) : \'\'; ?>">
                <p class="description"><?php _e( \'Enter a value for this field\',\'MJ\' ); ?></p>
            </td>
        </tr>
    <?php
    }

add_action( \'product_cat_edit_form_fields\',\'mj_taxonomy_edit_custom_meta_field\', 10, 2 );

public function mj_save_taxonomy_custom_meta_field( $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_product_cat\', \'mj_save_taxonomy_custom_meta_field\', 10, 2 );  
add_action( \'create_product_cat\', \'mj_save_taxonomy_custom_meta_field\', 10, 2 );

SO网友:brasofilo

1) 默认值wp_options 我真不明白人们为什么要求婚

update_option( "taxonomy_term_$t_id", $term_meta );
当我们可以有一个选项时,其索引是术语ID和作为值的自定义字段

$options = get_option( \'taxonomy_term_meta\' );
$options[$t_id] = $term_meta;
update_option( \'taxonomy_term_meta\', $options );
然后简单地拉动该选项并获取为给定术语ID存储的值

$options = get_option( \'taxonomy_term_meta\' );
echo $options[$tax->term_id];

2)自定义wp_taxonomymeta

这就是插件Taxonomy Metadata, 由James链接,does。很简单,一旦创建了这个表add_, get_, update_delete_metadata 将开始使用\'taxonomy\'. 像这样:

function add_term_meta($term_id, $meta_key, $meta_value, $unique = false) {
    return add_metadata(\'taxonomy\', $term_id, $meta_key, $meta_value, $unique);
}

function delete_term_meta($term_id, $meta_key, $meta_value = \'\') {
    return delete_metadata(\'taxonomy\', $term_id, $meta_key, $meta_value);
}

function get_term_meta($term_id, $key, $single = false) {
    return get_metadata(\'taxonomy\', $term_id, $key, $single);
}

function update_term_meta($term_id, $meta_key, $meta_value, $prev_value = \'\') {
    return update_metadata(\'taxonomy\', $term_id, $meta_key, $meta_value, $prev_value);
}
助手职位类型,如中所述Matthew Boynes 回答(我想有人在门票#10142中也提到了这一点。

4) 在盒子外面plugin code, 有一个链接指向Core Ticket #10142 讨论所有这些。这是一张4年的票,(closed)(maybelater), 许多开发人员都加入了进来,但没有得出任何结论。

最后,我们有了这个金块(我的重点):

paco pepe
由于我经常需要它,我编写了自己的解决方案:Misuses the "description" field as storage container for a serialized array. The only thing that was a little tricky was to display the plain description in the admin UI. 无论如何,这将是我希望的解决方案:只需转换描述字段,而不是添加一堆新字段。如果需要它,那么我们将在获得它后看到用例,并使用更高版本的可搜索解决方案。

Pretty 聪明的

SO网友:Matthew Boynes

最好的答案是(3) Some other option.

这有点非常规,但它的可扩展性最好,最充分地利用了核心,并且不需要添加数据库表:Add a hidden post type for the taxonomy. 分类法中的每个术语在post类型中都有自己的post。有了它,术语meta可以存储为post-meta。Here\'s an example of using this approach.

任何其他方法(包括“使用术语的描述字段来保存序列化数据”选项)的主要问题是可伸缩性、性能和兼容性。

SO网友:shishir

https://wordpress.org/plugins/taxonomy-metadata/

您可以通过上述插件进行自定义。。

结束

相关推荐

Wordpress & PHP sessions

我正在使用一个名为WP events manager的插件,我想添加自定义功能,以便每个事件都可以“添加”到“篮子”中,然后最终用户可以“签出”并注册这些事件。我认为这是通过在用户单击add-in PHP sessions时存储事件ID来实现的,然后在签出时使用您在签出时输入的信息循环查看项目。我是PHP会话新手,不知道如何在点击按钮时存储ID,然后在最后循环它们,如果有人知道这一点,或者知道任何相关文章,我将非常感激,通过谷歌搜索将我发送到雷区的主题。干杯