#jquery #wordpress #woocommerce #checkout #coupon
Вопрос:
Я создал функцию для добавления раскрывающегося поля перед информацией об оплате на странице оформления заказа.
Следующее работает, когда я попробовал эту add_action
функцию.
add_action('woocommerce_review_order_before_payment', 'add_store_selection');
function add_store_selection() {
$content .= '<div id="store-pickup-select">';
$content .= '<select><option selected="selected">Choose one</option>';
/* Here i will get a list of option value from another function */
$content .= '</select>';
$content .= '</div>';
echo $content;
}
Но что мне нужно, так это то, что я хочу, чтобы это раскрывающееся меню отображалось только при применении кода купона. Я удаляю add_action('woocommerce_review_order_before_payment', 'add_store_selection');
Затем я попробовал это:
function add_store_list() {
do_action( 'woocommerce_review_order_before_payment');
}
add_action( 'woocommerce_applied_coupon', 'add_store_list');
Раскрывающийся список появился поверх сведений о выставлении счетов, а не в woocommerce_review_order_before_payment
позиции
Как я могу сделать так, чтобы раскрывающийся список отображался в разделе «Перед оплатой» при нажатии на код купона?
Ответ №1:
Вы можете использовать событие checkout JS во внешнем интерфейсе WooCommerce, в этом случае
$( document.body ).trigger( 'applied_coupon_in_checkout' );
$( document.body ).trigger( 'removed_coupon_in_checkout' );
Таким образом, вы получаете:
function action_woocommerce_review_order_before_payment() {
$content = '<div id="store-pickup-select">';
$content .= '<select>';
$content .= '<option selected="selected">Choose one</option>';
$content .= '<option value="my-option">My option</option>';
$content .= '</select>';
$content .= '</div>';
echo $content;
}
add_action( 'woocommerce_review_order_before_payment', 'action_woocommerce_review_order_before_payment', 10, 0 );
// jQuery code
function action_wp_footer() {
if ( is_checkout() amp;amp; ! is_wc_endpoint_url() ) {
?>
<script type="text/javascript">
jQuery(function($) {
// Default
$( '#store-pickup-select' ).hide();
$( document.body ).on( 'applied_coupon_in_checkout removed_coupon_in_checkout', function( event ) {
// With no parameters, the .toggle() method simply toggles the visibility of elements:
$( '#store-pickup-select' ).toggle();
});
});
</script>
<?php
}
}
add_action( 'wp_footer', 'action_wp_footer' );