update_metadata对我不起作用

时间:2013-10-21 16:44:38

标签: wordpress

我正在尝试将自定义字段添加到我的分类中,但是当我保存值时,update_metadata函数不会保存任何内容

add_action( 'product_category_edit_form_fields', 'edit_product_category', 10, 2);
function edit_product_category($tag, $taxonomy)
{
    $product_category_sort_field = get_metadata($tag->taxonomy, $tag->term_id, 'product_category_sort_field', true);
    ?>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="product_category_sort_field">sort</label></th>
        <td>
            <input type="text" style="width:20%" name="product_category_sort_field" id="product_category_sort_field"
                value="<?php echo $product_category_sort_field; ?>"/><br />
        </td>
    </tr>
    <?php
}

add_action( 'edited_product_category', 'save_product_category', 10, 2);
function save_product_category($term_id, $tt_id)
{
    if (!$term_id) return;

    if ( isset( $_POST['product_category_sort_field'] ) ) {
        update_metadata($_POST['taxonomy'], $term_id, 'product_category_sort_field',
       $_POST['product_category_sort_field'] );
    }
}   

1 个答案:

答案 0 :(得分:1)

问题是没有wp_taxonomy_meta表,所以这不起作用:update_metadata($_POST['taxonomy'], ...

我见过的两个解决方案:存储在wp_options中或使用字段描述来存储JSON字符串。

在这里,我只使用一个 wp_option字段,但如果您有数百个条款,我不确定这是否可以很好地扩展。请注意,我们也使用了错误的钩子。

add_action( 'product_edit_form_fields', 'edit_product_category', 10, 2);
function edit_product_category($tag, $taxonomy)
{ 
    $option = get_option('product_category_sort_field');
    $product_category_sort_field = ( $option && isset( $option[$tag->term_id] ) ) 
        ? $option[$tag->term_id] : '';
    ?>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="product_category_sort_field">sort</label></th>
        <td>
            <input type="text" style="width:20%" name="product_category_sort_field" id="product_category_sort_field"
                value="<?php echo $product_category_sort_field; ?>"/><br />
        </td>
    </tr>
    <?php
}

add_action( 'edited_term_taxonomy', 'save_product_category', 10, 2);
function save_product_category( $term_id, $taxonomy )
{
    if (!$term_id) 
        return;

    $option = get_option('product_category_sort_field');

    if ( isset( $_POST['product_category_sort_field'] ) ) {
        $option[$term_id] = $_POST['product_category_sort_field'];
        update_option( 'product_category_sort_field', $option );
    }
}

你会在WordPress的答案中找到很多relevant posts,例如thisthis