在Woocommerce中添加自定义结帐字段时,结帐页面为空白

时间:2018-10-28 11:18:43

标签: php wordpress woocommerce cart checkout

在WooCommerce结帐页面中,我添加了一个自定义字段,如果我使用woocommerce_after_checkout_billing_form钩子或woocommerce_before_checkout_form钩子,一切都可以正常工作。

问题是我需要字段位于Billing Details标题上方,但是当我使用woocommerce_checkout_before_customer_details钩子所有内容消失(即使是侧边栏付款面板)时,只有我自定义字段标题可见。

我的代码:

// Create Custom checkout Field
add_action('woocommerce_checkout_before_customer_details', 'create_custom_field');

function create_custom_field($checkout) {

    global $woocommerce;
    $cart = $woocommerce->cart->get_cart();
    foreach($cart as $key => $value)
    {               
        $bespoke = $woocommerce->cart->get_item_data($value);
        if (strpos($bespoke, 'yes') !== false) {

            echo '<div id="customise_checkout_field"><h3>' . __('Bespoke Details') . '</h3>';
            woocommerce_form_field('bespoke_field', array(
                'type' => 'textarea',
                'class' => array('my-field-class form-row-wide'),
                'label' => __('Tell us about your idea') ,
                'placeholder' => __('Please explain what you want as detailed as possible...') ,
                'required' => true,),
            $checkout->get_value('bespoke_field'));
            echo '</div>';
        }
    }
}

有什么想法吗?非常感谢您的指导。

1 个答案:

答案 0 :(得分:0)

该钩子不存在$ checkout,因此未定义它。因此,它使空白页(错误)。但是您可以使用WC()->checkout来代替。

自Woocommerce版本3.3起,WC_cart方法get_item_data()已被弃用,wc_get_formatted_cart_item_data()函数取代了该方法。

现在global $woocommerce$woocommerce->cart也被简单的WC()->cart取代。

尝试以下方法:

// Add a Custom checkout Field
add_action( 'woocommerce_checkout_before_customer_details', 'add_custom_checkout_field' );
function add_custom_checkout_field() {

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        $bespoke = wc_get_formatted_cart_item_data( $cart_item );

        if ( strpos($bespoke, 'yes') !== false ) {

            echo '<div id="customise_checkout_field">';

            echo '<h3>' . __('Bespoke Details') . '</h3>';

            woocommerce_form_field('bespoke_field', array(
                'type'        => 'textarea',
                'class'       => array('my-field-class form-row-wide'),
                'label'       => __( "Tell us about your idea", "woocommerce" ),
                'placeholder' => __( "Please explain what you want as detailed as possible...", "woocommerce" ),
                'required'    => true,
            ), WC()->checkout->get_value('bespoke_field') );

            echo '</div>';
        }
    }
}

代码进入活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。