2015-09-28 3 views
2

Я новичок в PHP, и я обычно просматриваю сеть для статей и руководств, когда у меня проблема с кодировкой. К сожалению, я искал пару дней, пытаясь исправить свои собственные ошибки без везения, поэтому я надеюсь, что кто-то может помочь.Сохранение динамических полей пользовательских проверок в Woo commerce

Я создаю сайт с Wordpress и Woo commerce. Я выполнил некоторые обучающие программы, подобные этому (http://www.portmanteaudesigns.com/blog/2015/02/04/woocommerce-custom-checkout-fields-email-backend/), чтобы добавить пользовательские поля в woo commerce checkout.

Мне нужно добавить поле к кассе для каждого предмета в корзине, чтобы можно было собрать информацию по каждому предмету (поэтому, если количество предметов в корзине равно 6, будет предоставлено 6 полей для информации).

Используя код, приведенный ниже, для каждого элемента в корзину, поле добавляется:

/** 
* Add the field to the checkout 
**/ 
add_action('woocommerce_after_order_notes', 'wordimpress_custom_checkout_field'); 

function wordimpress_custom_checkout_field($checkout) { 

//Check if Shoe in Cart (UPDATE WITH YOUR PRODUCT ID) 
$shoe_in_cart = wordimpress_is_conditional_product_in_cart(); 

//Shoe is in cart so show additional fields 
if ($shoe_in_cart === true) { 
echo '<div id="my_custom_checkout_field">'; 

foreach ($_SESSION['value'] as $key => $value) { 
    $n = 1; 
    $itemQuantity = $value['quantity']; 
    $ProductID = $value['product_id']; 
    $_product = $value['data']->post; 


     for($QuantityCheck = 0; $QuantityCheck < $itemQuantity; $QuantityCheck++) { 
      $LabelTitle = ($_product->post_title. ' '.$n.' - shoe name'); 
      woocommerce_form_field('inscription_textbox'.$ProductID.$n, array(
       'type' => 'text', 
       'required' => true,  
       'placeholder' => __('Shoe name'),  
       'class' => array('inscription-text form-row-wide'), 
       'label' => __($LabelTitle), 
       ), $checkout->get_value('inscription_textbox'.$ProductID.$n)); 
      $checkoutFieldName = ('inscription_textbox'.$ProductID.$n); 
      $_SESSION['checkoutFields'] [] = $checkoutFieldName; 
      $n ++; 
     } 

} 

echo '</div>'; 

} 
} 

Я попытался прикрепить снимок результата, но моя репутация недостаточно высока (код работает и добавляются динамические дополнительные поля).

Моя проблема заключается в сохранении этих динамических настраиваемых полей в базе данных или их отображении на странице подтверждения заказа.

Это последний код, который я использовал, чтобы попытаться сохранить информацию о поле в базе данных:

add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta'); 

function my_custom_checkout_field_update_order_meta($order_id) { 

    foreach($_SESSION['checkoutFields'] as $key => $value){ 
    if(isset($_POST[$value])) { 
     add_post_meta($order_id, $value, $_POST[$value]); 
    } 
} 

} 

Пожалуйста, помогите.

Благодаря в ожидании

+0

У меня такая же проблема. –

+0

@Brock Мне до сих пор не удалось найти решение, если я это сделаю, я поделюсь здесь. – Adav365

ответ

0

Это было время, так как этот вопрос был отправлен, но я уверен, что это может помочь другим, поэтому позвольте мне ответить на, как это сделать.

Это то, что вы делаете:

function my_custom_checkout_field_update_order_meta($order_id) { 

foreach($_SESSION['checkoutFields'] as $key => $value){ 
if(isset($_POST[$value])) { 
    add_post_meta($order_id, $value, $_POST[$value]); 
}}} 

Но знаете что? Вам не обязательно это делать. Вам даже не нужно использовать foreach WordPress имеет основную функцию, называемую maybe_serialize Что автоматически проверяет, является ли это значение массивом.

Так вы могли бы сделать это следующим образом:

function my_custom_checkout_field_update_order_meta($order_id) {  
    if(isset($_POST[$value])) { 
     add_post_meta($order_id, $value, $_POST[$value]); 
    }} 

Here is еще один удивительный ответ, который описывает ответ в больших деталях.

Смежные вопросы