php – 在Woocommerce中显示或隐藏所选送货方式更改的html元素
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 在Woocommerce中显示或隐藏所选送货方式更改的html元素,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3728字,纯文字阅读大概需要6分钟。
内容图文
我正在尝试根据所选的送货方式显示/隐藏我的结帐页面中的一些元素.我试图显示/隐藏的页面元素来自另一个插件,因此我尝试更改它们的显示属性.我看过很多线程:
Show or hide checkout fields based on shipping method in Woocommerce 3
但它适用于结帐字段,我不知道如何为页面元素执行此操作.
然后基于this answer thread这是我的代码到目前为止:
add_action( 'wp_footer', 'conditionally_hidding_order_delivery_date' );
function conditionally_hidding_order_delivery_date(){
// Only on checkout page
if( ! is_checkout() ) return;
// HERE your shipping methods rate ID "Home delivery"
$home_delivery = 'distance_rate_shipping';
?>
<script>
jQuery(function($){
// Choosen shipping method selectors slug
var shipMethod = 'input[name^="shipping_method"]',
shipMethodChecked = shipMethod+':checked';
// Function that shows or hide imput select fields
function showHide( actionToDo='show', selector='' ){
if( actionToDo == 'show' )
$(selector).show( 200, function(){
$(this).addClass("validate-required");
});
else
$(selector).hide( 200, function(){
$(this).removeClass("validate-required");
});
$(selector).removeClass("woocommerce-validated");
$(selector).removeClass("woocommerce-invalid woocommerce-invalid-required-field");
}
// Initialising: Hide if choosen shipping method is "Home delivery"
if( $(shipMethodChecked).val() != '<?php echo $home_delivery; ?>' ) {
showHide('hide','#e_deliverydate_field' );
showHide('hide','#time_slot_field' );
}
// Live event (When shipping method is changed)
$( 'form.checkout' ).on( 'change', shipMethod, function() {
if( $(shipMethodChecked).val() == '<?php echo $home_delivery; ?>' ) {
showHide('show','#e_deliverydate_field' );
showHide('show','#time_slot_field' );
}
else {
showHide('hide','#e_deliverydate_field' );
showHide('hide','#time_slot_field' );
}
});
});
</script>
<?php
}
但它没有完全正常工作(初始化功能不起作用.)
很感谢任何形式的帮助.
附加编辑:
<p class="form-row form-row-wide validate-required" id="e_deliverydate_field" data-priority="" style="display: block;"><label for="e_deliverydate" class="">Date<abbr class="required" title="required">*</abbr></label><span class="woocommerce-input-wrapper"><input class="input-text hasDatepicker" name="e_deliverydate" id="e_deliverydate" placeholder="Choose a Date" value="" style="cursor:text !important;" type="text"></span></p>
我的目标是将p元素的显示属性从块更改为无,反之亦然.
解决方法:
所需的代码比我在其他答案中使用的代码简单得多,但您需要确保目标选择的运输方法是’distance_rate_shipping’,因为我无法测试它.
For initialization problem, see the solution exposed at the end of my answer.
简化的所需代码:
// Embedded jQuery script
add_action( 'wp_footer', 'checkout_delivery_date_script' );
function checkout_delivery_date_script() {
// Only checkout page
if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) return;
?>
<script type="text/javascript">
jQuery( function($){
var a = 'input[name^="shipping_method"]', b = a+':checked',
c = 'distance_rate_shipping',
d = '#e_deliverydate_field,#time_slot_field';
// Utility function that show or hide the delivery date
function showHideDeliveryDate(){
if( $(b).val() == c )
$(d).show();
else
$(d).hide('fast');
console.log('Chosen shipping method: '+$(b).val()); // <== Just for testing (to be removed)
}
// 1. On start
showHideDeliveryDate();
// 2. On live event "change" of chosen shipping method
$('form.checkout').on('change', a, function(){
showHideDeliveryDate();
});
});
</script>
<?php
}
代码位于活动子主题(或主题)的function.php文件中.它应该工作.
初始化问题:
这肯定是因为您正在使用的插件生成交付日期输出在初始化后会延迟
The solution can be to add some delay on initialization execution.
所以应该尝试替换这个:
// 1. On start
showHideDeliveryDate();
通过我的代码中的以下内容(将执行延迟调整为高于或低于500的值):
// 1. On start
setTimeout(function(){
showHideDeliveryDate();
}, 500);
内容总结
以上是互联网集市为您收集整理的php – 在Woocommerce中显示或隐藏所选送货方式更改的html元素全部内容,希望文章能够帮你解决php – 在Woocommerce中显示或隐藏所选送货方式更改的html元素所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。