【问题标题】:Show my custom meta data in woocommerce admin page在 woocommerce 管理页面中显示我的自定义元数据
【发布时间】:2014-01-11 13:43:56
【问题描述】:

我一直在使用 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]; ?>"

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

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

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

    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; ?>"
    

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

    【讨论】:

      【解决方案2】:

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

      我也开始尝试将自定义字段编码到一个站点中,然后在几页代码之后意识到,方式超出了“只是添加一个字段”的业务需求,ACF 插件可以在十次点击和两分钟内完成相同的工作。有时你只需要务实,并接受有时赢得调试游戏的最佳方法不是一开始就玩编码游戏。

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

      【讨论】:

        猜你喜欢
        • 2020-01-22
        • 2020-06-21
        • 2019-04-14
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 2018-10-01
        • 1970-01-01
        • 2021-05-22
        相关资源
        最近更新 更多