请原谅PHP noob问题…我在woocommerce购物车中添加了一个用于包装礼品的自定义复选框.我能够在自定义元框和订单摘要中获取返回到“订单”页面的值,但是我只能获取返回为null或“ 1”的值.我想返回“是”或“否”的值.在此先感谢您的任何建议.
这是我在功能中使用的代码.PHP(自WOOCOMMERCE文档中自定义):
/将“礼品包装”字段添加到结帐/
add_action('woocommerce_after_order_notes', 'gift_wrapping_field');
function gift_wrapping_field( $checkout )
{
woocommerce_form_field( 'gift_wrapping', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('Include Free Gift Wrapping'),
'required' => false,
), $checkout->get_value( 'gift_wrapping' ));
}
/处理结帐/
add_action('woocommerce_checkout_process', 'gift_wrapping_field_process');
function my_custom_checkout_field_process()
{
global $woocommerce;
// Check if set, if its not set add an error.
if (!$_POST['terms_conditions'])
$woocommerce->add_error( __('Please agree to terms and conditions.') );
}
/使用字段值更新订单元/
add_action('woocommerce_checkout_update_order_meta', 'gift_wrapping_field_update_order_meta');
function gift_wrapping_field_update_order_meta( $order_id )
{
if ($_POST['gift_wrapping']) update_post_meta( $order_id, 'Include Free Gift Wrapping', esc_attr($_POST['gift_wrapping']));
}
/*Update the order summary with field value*/
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta($order)
{
echo '
'.__('Include Free Gift Wrapping').': ' . $order->order_custom_fields['Include Free Gift Wrapping'][0] . '
';}
以下是表单结果返回给管理员的屏幕快照:
解决方法:
尝试改变这个
esc_attr($_POST['gift_wrapping'])
对此
(esc_attr($_POST['gift_wrapping'] = 1 ? 'yes' : ''))
我已经在一个为我工作的woocommerce测试站点上对此进行了测试.
如果勾选,将返回yes,如果取消勾选,则不返回任何内容.如果您沉迷于没有,那么您可以从此更改整行
if ($_POST['gift_wrapping']) update_post_meta( $order_id, 'Include Free Gift Wrapping', esc_attr($_POST['gift_wrapping']));
对此.即使未在技术上设置值,这也会强制保存值.
update_post_meta( $order_id, 'My Field', (esc_attr(isset($_POST['gift_wrapping']) && $_POST['gift_wrapping'] == 1 ? 'yes' : 'no')));
标签:forms,meta-boxes,wordpress,php
来源: https://codeday.me/bug/20191030/1964791.html