Переопределить поля оплаты Woocommerce из формы Gravity - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь переопределить выставление счетов и доставку значений woocommerce по умолчанию значениями поля ввода из формы гравитации, установленной для каждого продукта магазина.

Я могу достичь значений поля формы гравитации, выполняя хук gform_after_submission_1.Я сомневаюсь, как переопределить поля выставления счетов.

Моя логика кода пытается работать следующим образом:

//Hook action when selects payment and submits order
add_action("gform_after_submission_1", "after_submission", 20, 3);
function after_submission($entry, $form, $fields){
    /*Here is where I want to call woocommerce_checkout_fields filter
     passing $entry form field input values*/
}

// Override checkout fields
add_filter("woocommerce_checkout_fields" , "custom_override_checkout_fields", 10, 1);
//And here is where I override billing values
function custom_override_checkout_fields($entry) {
    $fields['billing']['billing_first_name']['default'] = $entry['14.3'];
    return $fields;
}

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Наконец-то я нашел решение.

Прежде всего, мне нужно найти правильный хук, чтобы переопределить поля выставления счета и доставки.Итак, я создал магию внутри woocommerce_checkout_create_order крючка.

add_action( 'woocommerce_checkout_create_order', 'override_checkout_fields', 10, 2 );
function override_checkout_fields( $order, $data ){
    //Do your magic here
}

Затем я обнаружил, где поля Gravity Form «хранятся» после добавления в корзину и, наконец, установил поля выставления счетов и доставки иззахваченные.

Код выглядит примерно так:

add_action( 'woocommerce_checkout_create_order', 'override_checkout_fields', 10, 2 );
function override_checkout_fields( $order, $data ){

    $cart = WC()->cart->get_cart();
    $field_name_billing = $values['_gravity_form_lead']['17.3']
    $field_name_shipping = $values['_gravity_form_lead']['17.3']
    //... rest of fields

    $order->set_billing_field_name($field_name_billing);
    $order->set_shipping_field_name($field_name_shipping);
}
0 голосов
/ 24 июня 2019

Для этого вам нужно сопоставить поля формы гравитации с полями формы извлечения woocommerce, создав собственный атрибут для формы гравитации.

Ниже приведен лишь пример шагов и хуков, которые можно реализовать для достижения вышеуказанной функциональности.

add_action( 'gform_field_standard_settings',  'gf_add_woo_field' , 10, 2 );
add_action( 'gform_editor_js','gf_editor_script' , 11, 2 );
add_action( 'gform_after_submission', 'set_post_content', 10, 2 );

function gf_add_woo_field( $position, $form_id ) {
$woo_fields = WC()->checkout()->checkout_fields;

для извлечения полей

if ( $position == 1368 ) {?>
<li class="woo_checkout_field_type_setting field_setting">
<label for="woo_checkout_field_type" class="section_label">
<?php esc_html_e( 'Field Type', 'gravityforms' ); ?>
<?php gform_tooltip( 'form_field_type' ) ?>
 </label>
<select id="woo_checkout_field_type" onchange="if(jQuery(this).val() == '') return; jQuery('#field_settings').slideUp(function(){StartChangeWooFieldType(jQuery('#woo_checkout_field_type').val());});">
foreach ($woo_fields as key=>val){ ?>
    <option value="<?php echo $key; ?>"><?php echo $val; ?></option>
<?php }
}

?>

function gf_editor_script() {
?>
<script type='text/javascript'>

   jQuery(document).bind("gform_load_field_settings", 
      function(event, field, form){
         //follow the code for attribute Field Type in post custom field gravity form
  });
</script>
<?php }

function set_post_content( $entry, $form ) {
  if ( ! empty( $form['fields'] ) && ! empty( $entry ) ) {
   foreach ( $form['fields'] as $field ) {
     if ( $field->type == '' ) {
       //find the attribute match and save in usermeta from entry creator email id or user id
       $field_id = $field->id;
            $value = $entry[ $field_id ];
       update($user_id,'billing_address',$value);
     }
    }
   }
 }

Примечание. Не вставляйте один и тот же код. Вам придется изменить какую-то его часть согласно вашему требованию.

Вы можете найти существующее дополнение *1016* и использовать его.

Следуйте: https://wisdmlabs.com/blog/add-custom-attribute-to-gravity-forms-field/

...