我试图隐藏基于运输方式的结帐字段。
function premove_billing_checkout_fields($fields) {
global $woocommerce;
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];
if( $chosen_shipping === 'local_pickup:20' ) {
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_state']);
unset($fields['billing']['billing_country']);
}
if( $chosen_shipping === 'wc_custom_shipping_pickpoint' ) {
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_address_1']);
unset($fields['billing']['billing_state']);
}
return $fields;
}
add_filter('woocommerce_checkout_fields',
'premove_billing_checkout_fields', 990 );
这段代码正在工作,但要隐藏字段,我需要刷新页面。如何使用Ajax隐藏字段?
更新4(于2018年6月发布)
-专门为Woocommerce 3.4添加了初始化延迟。x、
-解决了启用发货地址复选框时出现的错误
-增强的更轻、更有效的jQuery代码
-添加了条件字段验证
你不需要任何Ajax来实现这一点。第一个函数将使所有必要的签出字段不是“必需的”,因为这对于能够有条件地显示/隐藏签出字段是必要的。第二个函数(主要是jQuery)将显示/隐藏所需的字段,具体取决于所选的运输方式。
// Conditional Show hide checkout fields based on chosen shipping methods
add_action( 'wp_footer', 'custom_checkout_field_script' );
function custom_checkout_field_script() {
// HERE your shipping methods rate IDs
$local_pickup = 'local_pickup:20';
$pickpoint = 'wc_custom_shipping_pickpoint';
$required_text = esc_attr__( 'required', 'woocommerce' );
$required_html = '<abbr class="required" title="' . $required_text . '">*</abbr>';
?>
<script>
jQuery(function($){
var ism = 'input[name^="shipping_method"]', ismc = ism+':checked',
csa = 'input#ship-to-different-address-checkbox',
rq = '-required', vr = 'validate'+rq, w = 'woocommerce', wv = w+'-validated',
iv = '-invalid', fi = '-field', wir = w+iv+' '+w+iv+rq+fi,
b = '#billing_', s = '#shipping_', f = '_field',
a1 = 'country', a2 = 'address_1', a3 = 'address_2', a4 = 'postcode', a5 = 'state',
b1 = b+a1+f, b2 = b+a2+f, b3 = b+a3+f, b4 = b+a4+f, b5 = b+a5+f,
s1 = s+a1+f, s2 = s+a2+f, s3 = s+a3+f, s4 = s+a4+f, s5 = s+a5+f,
pickPoint = '<?php echo $pickpoint; ?>', localPickup = '<?php echo $local_pickup; ?>';
// Utility function to shows or hide checkout fields
function showHide( action='show', selector='' ){
if( action == 'show' )
$(selector).show(function(){
$(this).addClass(vr);
$(this).removeClass(wv);
$(this).removeClass(wir);
if( $(selector+' > label > abbr').html() == undefined )
$(selector+' label').append('<?php echo $required_html; ?>');
});
else
$(selector).hide(function(){
$(this).removeClass(vr);
$(this).removeClass(wv);
$(this).removeClass(wir);
if( $(selector+' > label > abbr').html() != undefined )
$(selector+' label > .required').remove();
});
}
// Initializing at start after checkout init (Based on the chosen shipping method)
setTimeout(function(){
if( $(ismc).val() == pickPoint ) // Chosen "Pick point" (Hiding "Delivery")
{
showHide('show',b1 ); // Country
showHide('hide',b2 ); // Address 1
showHide('hide',b3 ); // Address 2
showHide('hide',b4 ); // Postcode
showHide('hide',b5 ); // State
}
else if( $(ismc).val() == localPickup ) // Choosen "Local pickup" (Hidding "Take away")
{
showHide('hide',b1);
showHide('show',b2);
showHide('show',b3);
showHide('hide',b4);
showHide('hide',b5);
}
else
{
showHide('show',b1);
showHide('show',b2);
showHide('show',b3);
showHide('show',b4);
showHide('show',b5);
}
}, 100);
// When shipping method is changed (Live event)
$( 'form.checkout' ).on( 'change', ism, function() {
if( $(ismc).val() == pickPoint )
{
showHide('show',b1);
showHide('hide',b2);
showHide('hide',b3);
showHide('hide',b4);
showHide('hide',b5);
if( $(csa).prop('checked') ) {
showHide('show',s1);
showHide('hide',s2);
showHide('hide',s3);
showHide('hide',s4);
showHide('hide',s5);
}
}
else if( $(ismc).val() == localPickup )
{
showHide('hide',b1);
showHide('show',b2);
showHide('show',b3);
showHide('hide',b4);
showHide('hide',b5);
if( $(csa).prop('checked') ) {
showHide('hide',s1);
showHide('show',s2);
showHide('show',s3);
showHide('hide',s4);
showHide('hide',s5);
}
}
else
{
showHide('show',b1);
showHide('show',b2);
showHide('show',b3);
showHide('show',b4);
showHide('show',b5);
if( $(csa).prop('checked') ) {
showHide('show',s1);
showHide('show',s2);
showHide('show',s3);
showHide('show',s4);
showHide('show',s5);
}
}
});
// When "shipping to different address" is changed (Live event)
$(csa).click( function() {
if( $(ismc).val() == pickPoint && $(this).prop('checked') )
{
showHide('show',b1);
showHide('hide',b2);
showHide('hide',b3);
showHide('hide',b4);
showHide('hide',b4);
showHide('show',s1);
showHide('hide',s2);
showHide('hide',s3);
showHide('hide',s4);
showHide('hide',s5);
}
else if( $(ismc).val() == localPickup && $(this).prop('checked') )
{
showHide('hide',b1);
showHide('show',b2);
showHide('show',b3);
showHide('hide',b4);
showHide('hide',b4);
showHide('hide',s1);
showHide('show',s2);
showHide('show',s3);
showHide('hide',s4);
showHide('hide',s5);
}
else
{
showHide('show',b1);
showHide('show',b2);
showHide('show',b3);
showHide('show',b4);
showHide('show',b4);
showHide('show',s1);
showHide('show',s2);
showHide('show',s3);
showHide('show',s4);
showHide('show',s5);
}
});
});
</script>
<?php
}
// Checkout conditional fields validation
add_action('woocommerce_checkout_process', 'wps_select_checkout_field_process');
function wps_select_checkout_field_process() {
// HERE your shipping methods rate IDs
$local_pickup = 'local_pickup:20';
$pickpoint = 'wc_custom_shipping_pickpoint';
$chosen_shipping_method = WC()->session->get( 'chosen_shipping_methods' )[0];
$billing = '<strong> ' . __('Billing', 'woocommerce') . ' ';
$shipping = '<strong> ' . __('Shipping', 'woocommerce') . ' ';
$country = __('country.', 'woocommerce');
$address1 = __('address.', 'woocommerce');
$postcode = __('postcode.', 'woocommerce');
$state = __('state.', 'woocommerce');
$end_text = '</strong> '. __('is a required field.', 'woocommerce');
if( $chosen_shipping_method == $local_pickup ) {
if( empty($_POST['billing_address_1']) )
wc_add_notice( $billing . $address1 . $end_text, 'error' );
if( $_POST['ship_to_different_address'] ){
if( empty($_POST['shipping_address_1']) )
wc_add_notice( $shipping . $address1 . $end_text, 'error' );
}
}
elseif( $chosen_shipping_method == $pickpoint ) {
if( empty($_POST['billing_country']) )
wc_add_notice( $billing . $country . $end_text, 'error' );
if( $_POST['ship_to_different_address'] ){
if( empty($_POST['shipping_country']) )
wc_add_notice( $shipping . $country . $end_text, 'error' );
}
}
else {
if( empty($_POST['billing_country']) )
wc_add_notice( $billing . $country . $end_text, 'error' );
if( empty($_POST['billing_address_1']) )
wc_add_notice( $billing . $address1 . $end_text, 'error' );
if( empty($_POST['billing_postcode']) )
wc_add_notice( $billing . $postcode . $end_text, 'error' );
if( empty($_POST['billing_state']) )
wc_add_notice( $billing . $state . $end_text, 'error' );
if( $_POST['ship_to_different_address'] ){
if( empty($_POST['shipping_country']) )
wc_add_notice( $shipping . $country . $end_text, 'error' );
if( empty($_POST['shipping_address_1']) )
wc_add_notice( $shipping . $address1 . $end_text, 'error' );
if( empty($_POST['shipping_postcode']) )
wc_add_notice( $shipping . $postcode . $end_text, 'error' );
if( empty($_POST['shipping_state']) )
wc_add_notice( $shipping . $state . $end_text, 'error' );
}
}
}
代码进入函数。活动子主题(或主题)或任何插件文件中的php文件。
这是测试和工作在WooCommerce 3
排除不显示字段 Model.findAll({ attributes: { exclude: ['baz'] } });
是否可以根据REST调用配置Item类来显示和隐藏特定字段?例如,当调用时,我希望从类中隐藏(并显示),而当调用时,我希望从类中隐藏。
我试图根据仪表板变量值在图形面板上显示/隐藏查询。 动机 在同一个图形面板(用于显示多个主机)上,我有两个查询: 和: 其中是一个计数器。 第一个是一个通常的比率,它更适合显示趋势,另一个更复杂一些,但显示所有选择。当然,我想为图表制作一个面板,但也有一些开关,如趋势/选择来分析两者。我引入了一个带有自定义值的grafana dashboard变量,但我不明白如何使用它来隐藏或显示特定的查询。 此
本文向大家介绍javascript控制层显示或隐藏的方法,包括了javascript控制层显示或隐藏的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript控制层显示或隐藏的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。
问题内容: 我第一次弄乱React.js,找不到通过click事件在页面上显示或隐藏内容的方法。我没有在页面上加载任何其他库,所以我正在寻找使用React库的本机方法。到目前为止,这就是我所拥有的。当点击事件触发时,我想显示结果div。 问题答案: 大约在2020年做出反应 在回调中,调用状态挂钩的 setter函数以更新状态并重新渲染: JSFiddle 反应约2014年 关键是使用来更新点击处
我有一个带有底部导航视图、浮动操作按钮和四个片段的活动。我只想在“fragment1”和“fragment2”上显示浮动操作按钮,并在选择“fragment3”或“fragment4”时将其隐藏。启动应用程序时,“fragment1”会显示为浮动操作按钮,当我导航到“fragment3”时,我设法将其隐藏起来。但问题是,当我从“fragment3”或“fragment4”导航回“fragment1
问题内容: 我一段时间以来一直在寻找解决方案…我试图根据添加到Woocommerce结帐页面上的单选按钮选项来显示或隐藏特定的运费。但是我对Ajax&JQuery并不需要任何了解。 基本上,如果用户选择单选 选项_1 ,它将仅显示“ flat_rate:1 ”和“ flat_rate:2 ”。如果用户选择单选 选项_2 ,它将仅显示“ flat_rate:3 ”和“ flat_rate:4 ” 这
有没有办法在另一个程序中隐藏窗口或框架?例如,如果你打开了一个Firefox窗口,并且运行了你的程序,那么它会和firefoxFrame一样。setVisible(false),但很明显,我没有对另一个程序框架的引用。然后也许以后,firefoxFrame。setVisible(真)