触发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 等待&lt;?php ?&gt; 标签中的 php 有效代码,但是您正在放置 javascript,因此您必须在 &lt;script&gt; 之前关闭 PHP 标签并在 &lt;/script&gt; 之后打开一个新标签。否则你的 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函数的主要内容,如果未能解决你的问题,请参考以下文章

如果窗口宽度小于 768px,则不触发函数

Woocommerce - added_to_cart 触发器

WooCommerce订阅 - 续订时未触发动作挂钩

WooCommerce - 更改数量触发购物车中的 AJAX 调用

为啥 jQuery 单击事件侦听器未在 WooCommerce 按钮上注册?

在延时上触发 jQuery 函数