1

我正在尝试将自定义字段添加到我的分类中,但是当我保存值时 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'] );
    }
}   
4

1 回答 1

1

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

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

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

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 Answers 中找到许多相关帖子,例如thisthis

于 2013-10-21T19:15:58.383 回答