【问题标题】:Woocommerce function that triggers jquery code触发jquery代码的Woocommerce函数
【发布时间】: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>
   }
 
}

此功能使我的网站无法运行。任何人都知道我怎样才能让它工作?

【问题讨论】:

  • 控制台中显示了什么?

标签: javascript jquery wordpress function woocommerce


【解决方案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】:

    原因需要检查。

    1. 可能是因为您的 id(弹出窗口)没有放在 HTML 中。
    2. 可能你的 jQuery 没有加载。
    3. 在控制台中检查您发现了什么样的错误。
    4. 您的 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,这将起作用,那么这将停止计时器并触发弹出窗口。 谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 2016-01-28
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多