3

请原谅 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>';
}

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

自定义字段截图

4

2 回答 2

4

尝试改变这个

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')));
于 2013-12-28T23:52:05.533 回答
0

要显示“不”,可以试试这个

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) );
    }
}
于 2014-04-29T07:20:40.570 回答