触发jquery代码的Woocommerce函数
Posted
技术标签:
【中文标题】触发jquery代码的Woocommerce函数【英文标题】:Woocommerce function that triggers jquery code 【发布时间】:2021-12-10 19:42:50 【问题描述】:当将特定类别的产品添加到 woocommerce 购物车时,我试图通过使用简单的 JS 函数模拟按钮单击来触发弹出窗口。我见过一些人在 simmilair 函数中这样做,但我不知道这个可以工作。
如果类别在购物车中并且页面是结帐页面,我编写了以下函数:
add_action( 'woocommerce_before_checkout_form', 'check_category_in_cart' );
function check_category_in_cart()
$cat_in_cart = false;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item )
if ( has_term( 'test', 'product_cat', $cart_item['product_id'] ) )
$cat_in_cart = true;
break;
if ( $cat_in_cart )
<script>
jQuery(document).ready(function($)
$('#pop-up').trigger('click');
);
</script>
此功能使我的网站无法运行。任何人都知道我怎样才能让它工作?
【问题讨论】:
控制台中显示了什么? 【参考方案1】:使用setTimeout()。试试下面的代码。
add_action( 'woocommerce_before_checkout_form', 'check_category_in_cart' );
function check_category_in_cart()
$cat_in_cart = false;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item )
if ( has_term( 'test', 'product_cat', $cart_item['product_id'] ) )
$cat_in_cart = true;
break;
if ( $cat_in_cart ) ?>
<script>
jQuery(document).ready(function($)
setTimeout(function()
$('#pop-up').trigger('click');
, 10);
);
</script>
<?php
jQuery(document).ready(function($)
setTimeout(function()
$('#pop-up').trigger('click');
, 10);
jQuery(document).on('click','#pop-up',function()
alert('trigger');
);
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="pop-up">popup</button>
【讨论】:
为什么要在 DOM 准备好时设置超时?为什么是 100 毫秒?没有理由。 我在我的演示中进行了测试,没有设置超时,但它不起作用。 你试过$(function() $('#pop-up').trigger('click'); );
吗?
是的,还是不行。但适用于setTimeout
【参考方案2】:
PHP 等待<?php ?>
标签中的 php 有效代码,但是您正在放置 javascript,因此您必须在 <script>
之前关闭 PHP 标签并在 </script>
之后打开一个新标签。否则你的 jQuery 代码很好。
if ( $cat_in_cart )
?>
<script>
jQuery(function()
$('#pop-up').trigger('click');
);
</script>
<?php
【讨论】:
【参考方案3】:原因需要检查。
-
可能是因为您的 id(弹出窗口)没有放在 html 中。
可能你的 jQuery 没有加载。
在控制台中检查您发现了什么样的错误。
您的 PHP 函数应该正确关闭。
if ( $cat_in_cart )
?>
<script>
jQuery(document).ready(function($)
$('#pop-up').trigger('click');
);
</script>
<?php
如果一切顺利,你可以试试。
jQuery(document).ready(function($)
var timeInterVal = setInterval(CheckId, 1000);
CheckId function()
var id = $("#pop-up");
if(id.length!=0)
$('#pop-up').trigger('click');
clearInterval(timeInterVal);
);
如果您的 id 放置后未找到您的 ID,这将起作用,那么这将停止计时器并触发弹出窗口。 谢谢。
【讨论】:
以上是关于触发jquery代码的Woocommerce函数的主要内容,如果未能解决你的问题,请参考以下文章
Woocommerce - added_to_cart 触发器
WooCommerce - 更改数量触发购物车中的 AJAX 调用