woocommerce checkout if statement

时间:2015-04-23 14:25:07

标签: javascript php wordpress woocommerce

我正在尝试在我的客户端上的Wordpress上的woocommerce结帐页面上创建一个选择框,询问客户在哪里听说过该网站。我已经创建了它,现在我想在选择“其他”时弹出一个文本框。到目前为止,它还没有发生。

这是我下载的代码和目前的文本框:

/**
* 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时,我已经阅读了几种方法来做到这一点,但我也无法做到这一点,所以这似乎是最好的方法 - 尽管我可能是错的。

我还注意到,在网站上的代码中,当选择占位符时,它显示为<option value selected="selected">但是当我选择其他选项时,它仍然只显示在占位符上,所以我不知道不知道这是否与问题有关。

1 个答案:

答案 0 :(得分:0)

只有在提交结帐页面后才会设置

$_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();
    }
});