php - 在 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
用作替代品。
自 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 文件中。测试和工作。
推荐阅读
- xml - 接收带有 XML 原始数据的 POST 始终有一个空的 Request.Content 来自第三方,但 Postman 请求有效
- go - 将动态 C++ 库与 CGO 链接时发生“未定义的引用”错误
- java - hadoop 2.9.0中map中键的不匹配错误
- kubernetes - Kubernetes 的 Pod 间亲和力对于将前端和后端 Pod 共置在同一节点上以减少延迟和提高性能真的有用吗?
- cadence - Cadence vituoso 错误:无法编译 ahdlcmi 模块库
- python - 如何在不改变网络主体的情况下将模块添加到网络中?
- html - 如何在 flex 容器中对齐元素中心?
- javascript - 检查一个数组是否包含 JavaScript 中另一个数组的 2 个或更多元素
- visual-studio-code - 我可以通过键盘快捷键绕过文件末尾换行符的 Visual Studio Code 设置吗?
- python - 返回空列表,追加不起作用