Wordpress Woocommerce购物车脚本队列的短代码


Wordpress Woocommerce cart scripts enqeue for shortcodes

我试图弄清楚如何加载cart.min.js脚本不仅如果IS_CART,但如果SHORTCODE_EXISTS('woocommrece_cart'),我可以看到所有的前端脚本队列都在class-wc-frontend-scripts.php文件,我不想覆盖它,是否有任何钩子,我可以用来添加另一个if语句到同一文件?

谢谢:)


经过一些测试我想再解释一下我的问题:

  • 我有一个'woocommerce_cart'短代码,不加载脚本,它需要通过ajax工作(如当更新购物车等…)在其他页面上比购物车页面

  • 我看到在class-wc-front -scripts.php中,该脚本的队列只在is_cart()语句时才开始。

  • 我想知道我需要添加if(shortcode_exists('woccommerce_cart')),所以当它是一个短代码时,它也会排队。

  • 我正在添加IF,我看到一切都在前端工作。

  • 我认为把它放在原始插件文件中不是一个好主意,因为它会被下一次更新覆盖。

  • 我正在尝试在我的functions.php文件中加入新的IF.

  • 什么作品…

  • 返回原始文件

  • 在第247行(这里:https://github.com/woothemes/woocommerce/blob/master/includes/class-wc-frontend-scripts.php)有一个函数,添加更多的功能到ajax,没有它将无法工作…

  • 现在我想知道是否有一种方法可以使用钩子将另一个IF添加到同一文件?还是应该重写所有文件?(正如我之前所说,我认为这不是一个很好的做法,因为所有的功能都不会得到任何更新)。

  • 所以基本上我知道我需要做什么,我只是不知道什么是最好的方法如果可能的话可以用钩子或其他函数来做也许有人知道我不熟悉....

再次感谢您的帮助!:)


简短回答

您需要定义WOOCOMMERCE_CART常量,并确保您使用的是现代版本的Woocommerce。我在woocommerce 3.0.7中测试了这个解决方案。

if (!defined('WOOCOMMERCE_CART')) define( 'WOOCOMMERCE_CART', TRUE );

长回答

我有同样的问题:-我用do_shortcode()函数调用[woocommerce_cart]短代码在我网站的所有页面中显示购物车。购物车显示良好,但脚本(特别是cart.min.js)没有加载到页面中。这样做的结果是AJAX交互无法工作。

在我的网站页面已经运行WC_Frontend_Scripts::init()。这个函数调用WC_Frontend_Scripts::load_scripts,并且只有当is_cart()(文件wc-condition -functions.php)为TRUE时,该函数才会加载cart.min.js,正如您已经指出的那样。现在,当前版本的is_cart()在下列任何一个条件为TRUE时求值为TRUE:

  • is_page( wc_get_page_id( 'cart' ) )
  • defined( 'WOOCOMMERCE_CART' )
  • wc_post_content_has_shortcode( 'woocommerce_cart' )

所以,对我来说,解决这个问题最简单的方法是定义WOOCOMMERCE_CART常量。

希望这对你有帮助。: -)

我遇到了完全相同的问题,将购物车和结帐页面结合起来破坏了ajax自动购物车更新。我使用:

将购物车添加到结帐页面
  function cart_on_checkout_page() 
  {
    if ( is_wc_endpoint_url( 'order-received' ) ) return;
    echo do_shortcode('[woocommerce_cart]');
  }
  add_action( 'woocommerce_before_checkout_form', 'cart_on_checkout_page', 5 );

我的解决方案是在functions.php中使用以下代码来检查我们是否在结帐页面上,如果是,则排队/加载'wc-cart'脚本。它与Woocommerce 4.5.2版本一起工作。

function adjust_woocommerce_scripts() 
{ 
  if ( is_checkout() ) wp_enqueue_script( 'wc-cart' ); 
}
add_action( 'wp_enqueue_scripts', 'adjust_woocommerce_scripts', 11 ); 

您可以调整此函数以执行您需要的任何检查,例如如果SHORTCODE_EXISTS('woocommrece_cart') -这意味着'wc-cart'脚本只加载在您需要的页面上。