【问题标题】:Woocommerce open product link in new tab after "endless scroll" with ajaxWoocommerce 在使用 ajax “无限滚动”后在新选项卡中打开产品链接
【发布时间】:2019-02-18 21:03:56
【问题描述】:

我已经设法让我的 Woocommerce 网站上的所有产品链接在新标签页中打开,但是,我正在使用带有 ajax 的无限滚动来加载更多产品,并且通过无限滚动加载的产品不会在新标签中打开单击它们时的选项卡。

这是我当前在新标签页中打开产品的代码;

remove_action( 'woocommerce_before_shop_loop_item','woocommerce_template_loop_product_link_open', 10 );
add_action ( 'woocommerce_before_shop_loop_item', 'chr_function_open_new_tab', 10 );
function chr_function_open_new_tab() {
echo '<a target="_blank" href="' . get_the_permalink() . '" class="woocommerce-LoopProduct-link">';
}

对此的任何帮助都非常感谢。 提前致谢!

【问题讨论】:

    标签: php ajax wordpress woocommerce


    【解决方案1】:

    我认为您的 remove_action 无法采取行动。这就是为什么它会带来麻烦。所以试试这个代码:

    add_action('init',function(){ remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); } ,0);
    function chr_function_open_new_tab() {
        echo '<a target="_blank" href="' . get_the_permalink() . '" class="woocommerce-LoopProduct-link">';
    }

    第二个其他解决方案,你可以用简单的jQuery来做

    add_action('wp_footer',function(){
    if ( has_term( 'stone', 'product_cat' ) ) {
    echo '<script>
    
    //for existing content
    jQuery(".woocommerce-LoopProduct-link").attr("target","_blank");
    
    //for content part which comes from AJAX
    jQuery( document ).ajaxComplete(function() {
    jQuery(".woocommerce-LoopProduct-link").attr("target","_blank");
    });
    </script>';
    }
    });

    【讨论】:

      【解决方案2】:

      尝试使用这个专用的过滤钩子来添加到购物车按钮:

      // Change loop add to cart ajax button to a linked button to single product pages
      add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart', 20, 2 );
      function replace_loop_add_to_cart( $html, $product ) {
          $link = $product->get_permalink();
          $text = __("Read More", "woocommerce");
          return '<a href="' . $link . '" target="_blank" class="button alt add_to_cart_button">' . $text . '</a>';
      }
      

      这里是产品链接:

      add_filter( 'woocommerce_before_shop_loop_item', 'replace_template_loop_product_link_open', 1 );
      function replace_loop_product_link() {
          remove_action( 'woocommerce_before_shop_loop_item','woocommerce_template_loop_product_link_open', 10 );
          add_action ( 'woocommerce_before_shop_loop_item', 'new_loop_product_link_open', 10 );
      }
      
      function new_loop_product_link_open() {
          global $product;
      
          echo '<a href="' . esc_url( $product->get_permalink() ) . '" target="_blank" class="woocommerce-LoopProduct-link woocommerce-loop-product__link">';
      }
      

      代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

      但在您的情况下,它无法按预期工作,具体取决于您的自定义 ajax 功能的实现方式。由于通过ajax加载的产品仍然存在问题,target="_blank"也需要在相应的脚本中实现。

      目前没有人能为您提供更多帮助,因为我们无法猜测此功能是如何构建的。

      【讨论】:

      • 对不起,它有效,但仅适用于“添加到购物车”按钮,如果点击,我可以得到它,所以图片链接到新标签?
      • @ChrisB 已更新 - 但在您的情况下,它无法按预期工作,具体取决于您的自定义 ajax 功能的实现方式。
      • 感谢更新的脚本,如果可以帮助您了解 ajax 是如何构建的,我可以给您一个指向该站点的链接?我没有自己构建它,但它是通过一个主题。
      • @ChrisB 对不起,这不会有帮助……在这种情况下,您最好询问主题作者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 2015-09-17
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多