【问题标题】:Woocommerce replace add to cart url to link to product pageWoocommerce 替换添加到购物车 url 以链接到产品页面
【发布时间】:2014-12-02 14:05:47
【问题描述】:

我正在使用此短代码显示产品 [product_category category="extras" orderby="date"]。

可变产品显示“选择选项”,单个产品显示“加入购物车”。我能够将两者的文本更改为“查看产品”。

现在的问题是我需要更改那些曾经说“添加到购物车”的网址,因为它们没有链接到产品页面而是链接到“添加到购物车”。

我知道我可以编辑 woocommerce 模板,但我需要将此作为函数添加到 function.php

我不需要任何按钮,只需替换 url。

所以再次目的: 替换/重定向“添加到购物车”网址以链接到产品页面(仅在循环中,显然不在产品页面中)。

有人可以帮忙吗?

【问题讨论】:

  • 这样的事情会做,但它不起作用,我猜它没有更新到最新版本。 link 然后最后他们提到功能还包括按钮,我不需要,我只需要一个替换 url 的功能。谢谢!

标签: woocommerce


【解决方案1】:

如果有人选择更改 woocommerce 文件(当然是在子主题中!)。

在文件中:/loop/add-to-cart.php

变化:

global $product;

echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" data-quantity="%s" class="button %s product_type_%s">%s</a>',
        esc_url( $product->add_to_cart_url() ),
        esc_attr( $product->id ),
        esc_attr( $product->get_sku() ),
        esc_attr( isset( $quantity ) ? $quantity : 1 ),
        $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
        esc_attr( $product->product_type ),
        esc_html( $product->add_to_cart_text() )
    ),
$product );

收件人:

global $product;

if ( $product->product_type == "simple" ) {
    $simpleURL = get_permalink();
    $simpleLabel =  "View Product";  // BUTTON LABEL HERE
} else {
    $simpleURL =  $product->add_to_cart_url();  
    $simpleLabel = $product->add_to_cart_text();
};

echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" data-quantity="%s" class="button %s product_type_%s">%s</a>',
        esc_url( $simpleURL ),
        esc_attr( $product->id ),
        esc_attr( $product->get_sku() ),
        esc_attr( isset( $quantity ) ? $quantity : 1 ),
        $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
        esc_attr( $product->product_type ),
        esc_html( $simpleLabel )
    ),
$product );

【讨论】:

  • 这很好用。但似乎我的添加到购物车按钮失去了“AJAX 功能”。不确定您的代码是否会影响它。
  • 使用 WC 5.7.1:我在按钮中添加了 ajax_add_to_cart 类,AJAX 又回来了。谢谢你的回答。
【解决方案2】:

在你主题的 funtions.php 中添加以下代码:

/*STEP 1 - REMOVE ADD TO CART BUTTON ON PRODUCT ARCHIVE (SHOP) */

 function remove_loop_button(){
        remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
    }
    add_action('init','remove_loop_button');

    /*STEP 2 -ADD NEW BUTTON THAT LINKS TO PRODUCT PAGE FOR EACH PRODUCT */

        add_action('woocommerce_after_shop_loop_item','replace_add_to_cart');
        function replace_add_to_cart() {
            global $product;
            $link = $product->get_permalink();

            echo '<p style="text-align:center;margin-top:10px;">';
            $currentlang = get_bloginfo('language');
            //for multilanguage
            if($currentlang=="en-GB"){
                echo do_shortcode('<a  href="'.$link.'" class="button addtocartbutton">View Product</a>');
            } elseif($currentlang=="fr-FR"){
                echo do_shortcode('<a  href="'.$link.'" class="button addtocartbutton">Voir le produit</a>');
            }else {
               echo do_shortcode('<a  href="'.$link.'" class="button addtocartbutton">Ver Producto</a>');   
            }
            echo '</p>';
        }

【讨论】:

    【解决方案3】:

    我相信您可以在 WooCommerce 设置中禁用 AJAX 添加到购物车功能。

    如果由于某种原因不满意,您可以查看loop/add-to-cart.php 模板。添加到购物车链接是可过滤的。如果您查看add-to-cart.js,您会看到任何带有add_to_cart button 类的链接都会触发AJAX 添加到购物车功能,并且 适用于带有product_type_simple 类的按钮... .ie:只针对简单的产品。根据您的样式,您可以从链接中删除产品类型类或 add_to_cart_button 类。在下面的示例中,我删除了 add_to_cart_button 类。

    add_filter( 'woocommerce_loop_add_to_cart_link', 'so_26247988_add_to_cart_link', 10, 2 );
    function so_26247988_add_to_cart_link( $link, $product ){
        $link = sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" data-quantity="%s" class="button product_type_%s">%s</a>',
            esc_url( $product->add_to_cart_url() ),
            esc_attr( $product->id ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $quantity ) ? $quantity : 1 ),
            esc_attr( $product->product_type ),
            esc_html( $product->add_to_cart_text() )
        )
        return $link;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-21
      • 2018-08-08
      • 2018-03-31
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      相关资源
      最近更新 更多