Невозможно получить данные настраиваемого поля со страницы корзины на странице оформления заказа для woocommerce - PullRequest
0 голосов
/ 01 декабря 2018

Я создал несколько настраиваемых текстовых полей для добавления в поле имени и настраиваемые поля сообщения на странице корзины. Поэтому, как только пользователь переходит на страницу корзины, если он заполняет данные и нажимает кнопку «Продолжить», эти данные должны отображаться на странице проверки иПосле того, как клиент разместит заказ, эти данные пользовательских полей должны быть сохранены на странице заказов также в admin.

На данный момент для примечаний к заказу все работает нормально, а поле 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>';
}

1 Ответ

0 голосов
/ 03 декабря 2018

Решил, сделав так

/**
* 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>';
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...