【发布时间】:2015-11-25 03:17:08
【问题描述】:
我已经使用 Wordpress 和 WooCommerce 构建了一个自定义网站,并安装了 Select2 以生成运行良好的自定义选择。我遇到的问题是 WooCommerce 页面上的一些选择,特别是那些触发更改事件的选择。
自定义选择成功更改了选择的选项,但问题出现在旨在触发事件的选择上。例如,产品页面上的颜色变化下拉菜单或商店页面上的“排序依据”选择。
我查看了 WooCommerce JS 文件并发现了一些 WooCommerce 特定事件,这些事件在使用实际选择框进行选择时触发,但我不确定在使用 Select2 时如何实现。
这是与我正在谈论的事件相关的 WooCommerce JS 的副本(在本例中是对产品变体选择的更改):
.on( 'change', '.variations select', function() {
$form.find( 'input[name="variation_id"], input.variation_id' ).val( '' ).change();
$form.find( '.wc-no-matching-variations' ).remove();
if ( $use_ajax ) {
if ( $xhr ) {
$xhr.abort();
}
var all_attributes_chosen = true;
var some_attributes_chosen = false;
var data = {};
$form.find( '.variations select' ).each( function() {
var attribute_name = $( this ).data( 'attribute_name' ) || $( this ).attr( 'name' );
if ( $( this ).val().length === 0 ) {
all_attributes_chosen = false;
} else {
some_attributes_chosen = true;
}
data[ attribute_name ] = $( this ).val();
});
if ( all_attributes_chosen ) {
// Get a matchihng variation via ajax
data.product_id = $product_id;
$xhr = $.ajax( {
url: wc_cart_fragments_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_variation' ),
type: 'POST',
data: data,
success: function( variation ) {
if ( variation ) {
$form.find( 'input[name="variation_id"], input.variation_id' )
.val( variation.variation_id )
.change();
$form.trigger( 'found_variation', [ variation ] );
} else {
$form.trigger( 'reset_data' );
$form.find( '.single_variation_wrap' ).after( '<p class="wc-no-matching-variations woocommerce-info">' + wc_add_to_cart_variation_params.i18n_no_matching_variations_text + '</p>' );
$form.find( '.wc-no-matching-variations' ).slideDown( 200 );
}
}
} );
} else {
$form.trigger( 'reset_data' );
}
if ( some_attributes_chosen ) {
if ( $reset_variations.css( 'visibility' ) === 'hidden' ) {
$reset_variations.css( 'visibility', 'visible' ).hide().fadeIn();
}
} else {
$reset_variations.css( 'visibility', 'hidden' );
}
} else {
$form.trigger( 'woocommerce_variation_select_change' );
$form.trigger( 'check_variations', [ '', false ] );
$( this ).blur();
}
// Custom event for when variation selection has been changed
$form.trigger( 'woocommerce_variation_has_changed' );
} )
然后我自己尝试利用这个事件:
$('#pa_colour').select2();
$('#pa_colour').on('change', function(){
var $form = $(this).parents('form');
$form.trigger( 'woocommerce_variation_select_change' );
$form.trigger( 'woocommerce_variation_has_changed' );
});
很遗憾,该网站尚未上线,因此我无法提供链接,但希望您能理解。
如果有人可以在这里帮助我,我将不胜感激,我不确定 Wordpress 挂钩(如果是这样的话)是如何工作的,我可能只是遗漏了一些明显的东西。
谢谢, 凯瑟琳
【问题讨论】:
-
您在变体属性上使用 select2?客户如何知道您有哪些颜色/款式可供搜索?
-
@helgatheviking 我不确定你的意思,选项仍然显示,因为它们通常看起来不同?
-
我想我只是习惯在管理员中使用 Select2 并输入搜索。 select2 docs 表示“只要用户更改原始元素的值,就会在原始元素上触发更改事件”。所以我现在被难住了。
-
是的,这是个谜,嘿? @helgatheviking 感谢您的回复
标签: javascript wordpress plugins woocommerce jquery-select2