在 WooCommerce 中为特定产品类别自定义 "Add to cart" 按钮

Customize "Add to cart" button for a specific product category in WooCommerce

这是我的代码:

    add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' );    // 2.1 +

function woo_custom_cart_button_text( $text ) {
    if( has_term( 'liners', 'product_cat' ) ){
        $text = __( ' ', 'your-plugin' );

          echo do_shortcode('<a href="#" class="popmake-923">Request а Quote</a>');
    }
    return $text;
}

我需要制作功能来替换 "Add to cart" 按钮 Url 和仅针对一个特定产品类别的文本。

此按钮将触发带有联系表单的灯箱,此按钮的文本将为:请求报价

如何让它按预期工作?

这是它在 this link 上的实际工作方式。

已更新: 2 个不同的产品类别(2 个不同的按钮)

针对 'liners' 产品类别的产品的全球完整解决方案:

  1. 如果您的产品之一(在 'liners' 产品类别中)不是可变产品,您首先需要将商店和存档页面中的添加到购物车按钮替换为链接到产品。
  2. 在单个产品页面中,您需要删除添加到购物车按钮和数量字段,以将其替换为您的自定义按钮。

代码如下:

// Replacing the button add to cart by a link to the product in Shop and archives pages
add_filter( 'woocommerce_loop_add_to_cart_link', 'conditionally_replacing_add_to_cart_button', 10, 2 );
function conditionally_replacing_add_to_cart_button( $button, $product  ) {

    $categories = array('liners','custom-classics');

    $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

    // For 'liners' product category
    if( has_term( $categories, 'product_cat', $product_id ) ){
        $button_text = __("View product", "woocommerce");
        $button = '<a class="button" href="' . $product->get_permalink() . '">' . $button_text . '</a>';
    }
    return $button;
}

// replacing add to cart button and quantities by your custom button in Single product pages
add_action( 'woocommerce_single_product_summary', 'conditionally_replacing_template_single_add_to_cart', 1, 0 );
function conditionally_replacing_template_single_add_to_cart() {
    global $product;

    $categories = array('liners','custom-classics');

    $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

    function custom_button_replacement(){
        global $product;

        $categories = array('liners','custom-classics');

        $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

        if( has_term( $categories[0], 'product_cat', $product_id ) )
            $class_id = "923"; // liners
        elseif( has_term( $categories[1], 'product_cat', $product_id ) )
            $class_id = "925"; // custom-classics
        else $class_id = ""; // none

        // set below your custom text
        $button_text = __('Request а Quote', 'woocommerce');

        // Output your custom text
        echo '<a href="#" class="popmake-'.$class_id.' button">'.$button_text.'</a>';
    }

    // Only for 'liners' and 'custom-classics' product categories
    if( has_term( $categories, 'product_cat', $product_id ) ):
        // For variable product types
        if( $product->is_type( 'variable' ) ){
            // Removing add to cart button and quantities
            remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );

            // The button replacement
            add_action( 'woocommerce_single_variation', 'custom_button_replacement', 20 );
        }
        else // For all other product types
        {
            // Removing add to cart button and quantities
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );

            // The button replacement
            add_action( 'woocommerce_single_product_summary', 'custom_button_replacement', 30 );
        }
    endif;
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

此代码已经过测试,适用于所有产品类型 (简单、可变……)。你会得到 (例子):


这是我用 阅读更多 按钮替换 添加到购物车 按钮的解决方案,带有 class 和 ID在某个类别中。


   /* // Replace the Add to Cart Btn in Category Ammunition with View Product Btn  */

      add_filter('woocommerce_loop_add_to_cart_link','change_simple_shop_add_to_cart',10,2);
      function change_simple_shop_add_to_cart( $html, $product ){


           $category_ammunition = $product->get_categories();


          if (strstr($category_ammunition, 'Ammunition')) { // Add Your Category Here 'Ammuntion'

     $html = sprintf( '<a id="read-more-btn" rel="nofollow" href="%s" data-product_id="%s"  class="button vp-btn">%s</a>',
                      esc_url( get_the_permalink() ),
                      esc_attr( $product->get_id() ),
                      esc_html(  __( 'Read More', 'woocommerce' ) )
              );
              $category_ammunition = $product->get_categories();
          }

          return $html;
      }