首页 文章

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

提问于
浏览
0

我一直在使用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;
}

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

谢谢你的帮助


Update: 具体来说,我认为正是这条线让我感到困惑:

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

2 回答

  • 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

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

    我也开始尝试将自定义字段编码到一个站点中,然后在几页代码超出"just adding a field"的业务需求之后实现,ACF插件在十次点击和两分钟内完成相同的工作 . 有时候你必须要务实,并且有时候接受调试游戏的最佳方式就是不要首先玩编码游戏 .

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

相关问题