在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>';
}
}
}
有什么想法吗?非常感谢您的指导。
答案 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文件中。经过测试,可以正常工作。