在woocommerce管理页面中显示我的自定义元数据

时间:2014-01-11 13:43:57

标签: php wordpress woocommerce

我一直在使用Wordpress和Woocommerce将自定义元字段添加到我的管理产品页面。我的一切工作正常,但是当我保存产品时,它没有显示我在元框中输入的信息。

我检查了数据库并确实保存了数据,我看到了我在值中输入的数据,元字段名称在元键中。因此,这使我相信一切正常,除非在保存产品后显示管理产品页面上的值。

我认为问题在于这两个函数中的一个但不确定,它可能在save函数中,虽然它调用update_post_meta。

这里是我认为我的问题所在:

function variable_fields( $loop, $variation_data ) {
?>  
    <tr>
        <td>
            <div>
                    <label><?php _e( 'My Custom Field', 'woocommerce' ); ?></label>
                    <input type="text" size="5" name="my_custom_field[<?php echo $loop; ?>]" value="<?php echo $variation_data['_my_custom_field'][0]; ?>"/>
            </div>
        </td>
    </tr>
<?php
}

function variable_fields_js() {
?>
<tr>
        <td>
            <div>
                    <label><?php _e( 'My Custom Field', 'woocommerce' ); ?></label>
                    <input type="text" size="5" name="my_custom_field[' + loop + ']" />
            </div>
        </td>
    </tr>
<?php
}

这是保存数据的功能,只是问题就在这里?

function variable_fields_process( $post_id ) {
    if (isset( $_POST['variable_sku'] ) ) :
        $variable_sku = $_POST['variable_sku'];
        $variable_post_id = $_POST['variable_post_id'];
        $variable_custom_field = $_POST['my_custom_field'];
        for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
            $variation_id = (int) $variable_post_id[$i];
            if ( isset( $variable_custom_field[$i] ) ) {
                update_post_meta( $variation_id, '_my_custom_field', stripslashes( $variable_custom_field[$i] ) );
            }
        endfor;
    endif;
}

仔细查看代码没有任何内容对我有用。一切正常,除非我保存产品,输入的数据没有显示(但它在数据库中)所以我认为它可能与保存时相冲突,在字段中显示保存的值。

感谢您的帮助

<小时/> 的更新 具体来说,我认为正是这条线让我感到困惑:

value="<?php echo $variation_data['_my_custom_field'][0]; ?>"

2 个答案:

答案 0 :(得分:0)

我知道这有点晚了,但我设法解决了这个问题,并希望与你分享。

基本上WooCommerce已经放弃了$variation_data。您现在需要将$variation添加到您的函数并获取ID。使用ID,您可以获取post_meta / custom字段。这可以这样做:

function variable_fields( $loop, $variation_data, $variation ) {
    $get_variation_id = $variation->ID;
    $data_to_get = get_post_meta($get_variation_id, '_my_custom_field', true );

这一行:

value="<?php echo $variation_data['_my_custom_field'][0]; ?>"

然后成为:

value="<?php echo $data_to_get; ?>"

就是这样!我希望这可以帮助您和遇到此页面的任何其他人。

答案 1 :(得分:-1)

我建议您尝试使用高级自定义字段(ACF)插件,假设这是针对您的网站而不是代码进入已发布的插件。

我也开始尝试将自定义字段编码到网站中,然后在几页代码 way 超出“只添加字段”的业务需求后实现,ACF插件执行10次​​点击和2分钟相同的工作。有时你必须务实,并且有时候接受调试游戏的最佳方式就是不要首先玩编码游戏。

道歉,如果这不是您或您正在寻找的答案。