【问题标题】:Unable to fetch custom field data from cart page to checkout page for orders in woocommerce无法从购物车页面获取自定义字段数据到 woocommerce 中订单的结帐页面
【发布时间】:2018-12-01 13:21:51
【问题描述】:

我创建了一些自定义文本字段以添加到购物车页面中的名称字段和自定义消息字段。因此,一旦用户进入购物车页面,如果他填写数据并单击继续结帐,这些数据应显示在结帐页面中并且一旦客户下订单,这些自定义字段数据也应存储在管理员的订单页面中。

到目前为止,对于订单说明,它工作正常,并且字段 To 不起作用。这是我厌倦的代码。它在管理面板中仅显示 To 作为标题,但未在字段中显示名称在管理面板中。

// Add the order_comments field to the cart
add_action( 'woocommerce_cart_collaterals', 'order_comments_custom_cart_field' );
function order_comments_custom_cart_field() {
?>
<div class="customer_notes_on_cart" style="clear:both;">
<?php
woocommerce_form_field('to_notes_text', array(
    'placeholder'   => __('To'),
    'class' => array('form-row-last'),
    'clear' => true,
), ''); 
?></div><?php
 }
 // PHP: Remove "(optional)" from non required fields
 add_filter( 'woocommerce_form_field' , 'remove_checkout_optional_fields_label', 10, 4 );
function remove_checkout_optional_fields_label( $field, $key, $args, $value ) {
// Only on cart page
if( is_cart() ) {
    $optional = '&nbsp;<span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
    $field = str_replace( $optional, '', $field );
}
return $field;
}
// Process the checkout and overwriting the normal button
 add_action( 'woocommerce_proceed_to_checkout', 'change_proceed_to_checkout', 15 );
function change_proceed_to_checkout() {
remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );

?>
<form id="checkout_form" method="POST" action="<?php echo wc_get_checkout_url(); ?>">
    <input type="hidden" name="to_notes" id="to_notes" value="">        
    <button type="submit" class="checkout-button button alt wc-forward" style="width:100%;"><?php
    esc_html_e( 'Proceed to checkout', 'woocommerce' ) ?></button>
</form>
<?php
 }
  // Jquery script for cart and checkout pages
 add_action('wp_footer', 'customer_notes_jquery' );
 function customer_notes_jquery() {
?>
<script>
jQuery(function($) {
    <?php // For cart
        if( is_cart() ) : ?>            
        $('#to_notes_text').on( 'blur', function(){
            $('#to_notes').val($(this).val());
        });

    <?php // For checkout
        elseif( is_checkout() && ! is_wc_endpoint_url() ) : ?>
        $('#to_comments' ).val("<?php echo sanitize_text_field($_POST['to_notes']); ?>");           
    <?php endif; ?>
});
</script>
<?php
}
/**
* Update the order meta with field value
*/
add_action( 'woocommerce_checkout_update_order_meta', 
'my_custom_checkout_field_update_order_meta' );
function my_custom_checkout_field_update_order_meta( $order_id ) {
?>
<?php
if ( ! empty( $_POST['to_notes_text'] ) ) {
    update_post_meta( $order_id, 'To', sanitize_text_field( $_POST['to_notes_text'] ) );
}
}
/**
  * Display field value on the order edit page
 */
  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){
    ?>
<?php
echo '<p><strong>'.__('TO').':</strong> ' . get_post_meta( $order->id, 'TO', true ) . '</p>';
}

【问题讨论】:

  • 谁能建议我如何做到这一点

标签: php woocommerce


【解决方案1】:

这样解决了

/**
* Update the order meta with field value
**/ 
add_action( 'woocommerce_checkout_update_order_meta', 
'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
?>
<?php
if ( ! empty( $_POST['from_comments'] ) ) {
    update_post_meta( $order_id, 'FROM', sanitize_text_field( $_POST['from_comments'] 
 ) );
}   
}
/**
* Update the order meta with field value
**/ 
add_action( 'woocommerce_checkout_update_order_meta', 
'my_customs_checkout_field_update_order_meta' );
 function my_customs_checkout_field_update_order_meta( $order_id ) {
?>
<?php
if ( ! empty( $_POST['to_comments'] ) ) {
    update_post_meta( $order_id, 'TO', sanitize_text_field( $_POST['to_comments'] ) 
  );
   }    
   }
   /**
   * Display field value on the order edit page
   **/
   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){
?>
<?php
echo '<p><strong>'.__('FROM').':</strong> ' . get_post_meta( $order->id, 'FROM', true 
  ) . '</p>';
 echo '<p><strong>'.__('TO').':</strong> ' . get_post_meta( $order->id, 'TO', true ) 
 . '</p>';
  }
 /**
 * Add the field to the checkout
 */
 add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );

 function my_custom_checkout_field( $checkout ) {
 ?>
 <?php
  echo '<div id="my_custom_checkout_field"><h2>' . __('TO ') . '</h2>';
  woocommerce_form_field( 'from_comments', array(
    'type'          => 'text',
    'class'         => array('my-field-class form-row-wide'),
    'placeholder'   => __('FROM'),
    ), $checkout->get_value( 'from_comments' ));

   woocommerce_form_field( 'to_comments', array(
    'type'          => 'text',
    'class'         => array('my-field-class form-row-wide'),
    'placeholder'   => __('TO'),
    ), $checkout->get_value( 'to_comments' ));
       echo '</div>';
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 2023-03-26
    • 2020-10-27
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多