从购物车表单复选框返回字符串(是/否)到 wordpress 元框

Posted

技术标签:

【中文标题】从购物车表单复选框返回字符串(是/否)到 wordpress 元框【英文标题】:Retun a string (yes/no) from cart form checkbox to wordpress meta box 【发布时间】:2014-01-16 04:18:08 【问题描述】:

请原谅 php 菜鸟问题...我在我的 woocommerce 购物车中添加了一个用于礼品包装的自定义复选框。我可以在自定义元框和订单摘要中获取返回“订单”页面的值,但我只能获取返回为 null 或“1”的值。我想返回“是”或“否”的值。提前感谢您的任何建议。


这是我在 FUNCTIONS.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 '<p><strong>'.__('Include Free Gift Wrapping').':</strong> ' . $order->order_custom_fields['Include Free Gift Wrapping'][0] . '</p>';


这是从表单结果返回给管理员的屏幕截图:

【问题讨论】:

感谢您重新格式化代码,@The Humble Rat... 不胜感激! 【参考方案1】:

尝试更改此设置

esc_attr($_POST['gift_wrapping'])

到这里

(esc_attr($_POST['gift_wrapping'] = 1 ? 'yes' : ''))

我已经在我拥有并为我工作的 woocommerce 测试网站上对此进行了测试。

如果勾选,这将返回是,如果未勾选,则返回任何内容。如果你一心一意没有,那么你可以从这里改变整行

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')));

【讨论】:

谢谢!第一个建议效果很好。即使将“我的领域”调整为“包括免费礼品包装”,我也无法让“不”工作。不知道为什么,因为你所做的一切似乎都是有道理的,但我稍后会玩。 非常感谢您的帮助!【参考方案2】:

要显示“不”,不妨试试这个

function gift_wrapping_field_update_order_meta( $order_id ) 

    $gift_wrapping = 'no';
    if ($_POST['gift_wrapping']) 
        $gift_wrapping = 'yes';
        update_post_meta( $order_id, 'Include Free Gift Wrapping', esc_attr($gift_wrapping) );
    

【讨论】:

以上是关于从购物车表单复选框返回字符串(是/否)到 wordpress 元框的主要内容,如果未能解决你的问题,请参考以下文章

添加到购物车

仅在至少选中一个复选框时才使用外部提交按钮提交表单

05-vue表单绑定与购物车实例

05-vue表单绑定与购物车实例

05-vue表单绑定与购物车实例

在WooCommerce的“快速查看”窗口中显示自定义表单