在 Woocommerce 中添加自定义结帐字段时出现空白结帐页面
Blank checkout page when adding a custom checkout field in Woocommerce
在 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>';
}
}
}
有什么想法吗?非常感谢您的指导。
此挂钩不存在$checkout,因此未定义。所以它使一个空白页(一个错误)。但是您可以使用 WC()->checkout
作为替换。
WC_cart
方法 get_item_data()
已弃用,自 Woocommerce 版本 3.3 起,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 文件。已测试并有效。
在 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>';
}
}
}
有什么想法吗?非常感谢您的指导。
此挂钩不存在$checkout,因此未定义。所以它使一个空白页(一个错误)。但是您可以使用 WC()->checkout
作为替换。
WC_cart
方法 get_item_data()
已弃用,自 Woocommerce 版本 3.3 起,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 文件。已测试并有效。