2014-10-08 130 views
3

我正在使用此简码显示产品[product_category category =“extras”orderby =“date”]。Woocommerce取代add to cart链接到产品页面

变量产品显示“选择选项”,单个产品显示“添加到购物车”。我能够更改文字说“查看产品”。

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

我知道我可以编辑woocommerce模板,但我需要这是一个功能被添加到function.php

我不需要任何涉及按钮,只需更换网址。

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

有人可以帮忙吗?

+0

这样的事情会做,但它不起作用,它我没有更新到最后的版本。 [链接](http://www.fix-css.com/2013/10/replace-add-to-cart-button-in-products-category-list-with-a-link-to-single-产品页在woocommerce /) 然后最后他们提到的功能也包括按钮,我不需要,我只需要一个函数来替换url。 谢谢! – Tony 2014-10-08 01:45:49

回答

1

我相信你可以在WooCommerce设置中禁用AJAX add-to-cart功能。

如果由于某些原因不能令人满意,您可以查看loop/add-to-cart.php模板。添加到购物车链接是可过滤的。如果你看看add-to-cart.js,你可以看到AJAX加入购物车功能被触发的任何链接与add_to_cart button类,只有作品按钮与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; 
} 
2

如果有人选择改变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); 
1

在你主题的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>'; 
     } 
相关问题