проверка woocommerce if statement

53
3

Я пытаюсь создать окно выбора на моей странице проверки клиента woocommerce на Wordpress, которая спрашивает, где клиент узнал об этом сайте. Я добрался до его создания, и теперь я пытаюсь открыть текстовое поле, когда выбрано "другое". Пока этого не происходит.

Здесь код, который у меня есть для раскрывающегося списка и текстовое поле на данный момент:

/**
* Add how did you hear about us field to the checkout
**/
add_action('woocommerce_after_order_notes', 'how_did_you_hear');

function how_did_you_hear( $checkout ) {

echo '<div id="how_did_you_hear">';

woocommerce_form_field( 'hear_about_us', array(
'type' => 'select',
'class' => array('how_did_you_hear_about_us form-row-wide'),
'label' => __('How did you hear about us?'),
'required' => true,
'onChange' =>'howdidOnchange();',
'options' => array(
'' => __('-- Choose an option --', 'woocommerce'),
'Google' => __('Google', 'woocommerce'),
'Facebook' => __('Facebook', 'woocommerce'),
'Twitter' => __('Twitter', 'woocommerce'),
'Mother & Baby Magazine' => __('Mother & Baby Magazine', 'woocommerce'),
'eBay' => __('eBay', 'woocommerce'),
'Count the Kicks' => __('Count the Kicks', 'woocommerce'),
'Other (please specify)' => __('Other (please specify)', 'woocommerce'))
), $checkout->get_value( 'hear_about_us' ));

echo '</div>';

}

/**
* Process the checkout
**/
add_action('woocommerce_checkout_process', 'how_did_you_hear_process');

function how_did_you_hear_process() {
global $woocommerce;
}

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

function how_did_you_hear_update_order_meta( $order_id ) {
if ($_POST['hear_about_us']) update_post_meta( $order_id, 'How did you hear about us?', esc_attr($_POST['hear_about_us']));
}

//Add text box if other is selected

if ($_POST['hear_about_us'] == 'Other (please specify)') {

add_action('woocommerce_after_order_notes', 'how_did_other');

function how_did_other( $checkout ) {

echo '<div id="how_did_other">';

woocommerce_form_field( 'other_please_specify', array(
'type' => 'text',
'class' => array('other-please-specify form-row-wide'),
'label' => __('Other (please specify)'),
'placeholder' => __('Enter something'),
), $checkout->get_value( 'other_please_specify' ));

echo '</div>';

}

/**
* Process the checkout
**/
add_action('woocommerce_checkout_process', 'how_did_other_process');

function how_did_other_process() {
global $woocommerce;
}

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

function how_did_other_update_order_meta( $order_id ) {
if ($_POST['other_please_specify']) update_post_meta( $order_id, 'Other (please specify)', esc_attr($_POST['other_please_specify']));
}
}

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

Я также заметил, что в коде на сайте, когда выбран placeholder, он показывает как <option value selected="selected"> но когда я выбираю другие параметры, которые все еще отображаются только на заполнителе, поэтому я не знаю, связано ли это с проблемой.

спросил(а) 2015-04-23T17:25:00+03:00 4 года, 7 месяцев назад
1
Решение
72

$_POST['hear_about_us'] будет установлен только после отправки страницы проверки, а крюк woocommerce_after_order_notes запускается при загрузке страницы проверки. Таким образом, вы добавляете how_did_other к крюку после того, как он уже запущен.

Самый простой способ сделать это - сначала включить другое текстовое поле, но скрыто со style="display:none;" , и раскрыть его с помощью javascript

var selectInput = $('.how_did_you_hear_about_us');
var otherInput = $('.other-please-specify');
selectInput.change(function() {
if(selectInput.val()==='Other (please specify)') {
otherInput.show();
} else {
otherInput.hide();
}
});

ответил(а) 2015-04-23T19:33:00+03:00 4 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема