Php 替换产品类别的单个产品页面上的“添加到购物车”按钮

Php 替换产品类别的单个产品页面上的“添加到购物车”按钮,php,wordpress,button,woocommerce,product,Php,Wordpress,Button,Woocommerce,Product,我正在尝试添加一个自定义链接按钮,该按钮指向联系人页面-在第一个if条件中,在按钮上显示带有自定义URL的“联系我们”文本,而不是“添加到购物篮”按钮 怎么做?这是到目前为止我的代码。它显示属于类别“64”的每个产品的自定义按钮文本。这正是我想要的。但如何添加该按钮将功能从购物车按钮更改为自定义链接按钮?我正在考虑是否必须更改此购物车按钮功能。怎么做 add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_ca

我正在尝试添加一个自定义链接按钮,该按钮指向联系人页面-在第一个if条件中,在按钮上显示带有自定义URL的“联系我们”文本,而不是“添加到购物篮”按钮

怎么做?这是到目前为止我的代码。它显示属于类别“64”的每个产品的自定义按钮文本。这正是我想要的。但如何添加该按钮将功能从购物车按钮更改为自定义链接按钮?我正在考虑是否必须更改此购物车按钮功能。怎么做

add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' );

function woo_custom_cart_button_text() {
    global $product;
    $cat_id = 64;

    $product->get_category_ids();
    if ( in_array( $cat_id, $product->get_category_ids() ) ) {
        return __( 'Contact us', 'woocommerce' );
    }
    else {
        return __( 'Add to Basket', 'woocommerce' );
    }
}

在挂钩中添加过滤器优先级


添加过滤器(“woocommerce\u product\u single\u add\u to\u cart\u text”、“woo\u custom\u cart\u button\u text”,50)

对于ID为64的产品类别,以下代码将用单个产品页面中的自定义按钮和存档页面中的产品链接按钮替换“添加到购物车”按钮:

// The custom replacement button function
function custom_product_button(){
    // HERE your custom button text and link
    $button_text = __( "Custom text", "woocommerce" );
    $button_link = '#';
    
    // Display button
    echo '<a class="button" href="'.$button_link.'">' . $button_text . '</a>';
}

// Replacing the single product button add to cart by a custom button for a specific product category
add_action( 'woocommerce_single_product_summary', 'replace_single_add_to_cart_button', 1 );
function replace_single_add_to_cart_button() {
    global $product;
    
    // Only for product category ID 64
    if( has_term( '64', 'product_cat', $product->get_id() ) ){

        // For variable product types (keeping attribute select fields)
        if( $product->is_type( 'variable' ) ) {
            remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
            add_action( 'woocommerce_single_variation', 'custom_product_button', 20 );
        }
        // For all other product types
        else {
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
            add_action( 'woocommerce_single_product_summary', 'custom_product_button', 30 );
        }
    }
}

// Replacing the button add to cart by a link to the product in Shop and archives pages for as specific product category
add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart_button', 10, 2 );
function replace_loop_add_to_cart_button( $button, $product  ) {
    // Only for product category ID 64
    if( has_term( '64', 'product_cat', $product->get_id() ) ){
        $button_text = __( "View product", "woocommerce" );
        $button = '<a class="button" href="' . $product->get_permalink() . '">' . $button_text . '</a>';
    }

    return $button;
}
//自定义替换按钮功能
功能自定义\产品\按钮(){
//这里是您的自定义按钮文本和链接
$button_text=uuuuuu(“自定义文本”、“woocommerce”);
$button_link='#';
//显示按钮
回声';
}
//用特定产品类别的自定义按钮替换“添加到购物车”的单个产品按钮
添加操作('woocommerce\u single\u product\u summary','replace\u single\u add\u to\u cart\u button',1);
功能替换单次添加到购物车按钮(){
全球$产品;
//仅适用于产品类别ID 64
if(有_术语('64','product_cat',$product->get_id()){
//对于可变产品类型(保留属性选择字段)
如果($product->is_类型('variable')){
删除操作('woocommerce\u single\u variation'、'woocommerce\u single\u variation\u add\u to\u cart\u button',20);
添加操作('woocommerce\u single\u variation'、'custom\u product\u button',20);
}
//适用于所有其他产品类型
否则{
删除操作('woocommerce\u single\u product\u summary'、'woocommerce\u template\u single\u add\u to\u cart',30);
添加操作('woocommerce\u single\u product\u summary'、'custom\u product\u button',30);
}
}
}
//将“添加到购物车”按钮替换为指向特定产品类别的“商店中的产品”和“存档”页面的链接
添加过滤器('woocommerce\u loop\u add\u to\u cart\u link','replace\u loop\u add\u to\u cart\u button',10,2);
函数替换循环添加到购物车按钮($button$product){
//仅适用于产品类别ID 64
if(有_术语('64','product_cat',$product->get_id()){
$button_text=uuuuuuuuuuuuu(“查看产品”、“woocommerce”);
$button='';
}
返回$按钮;
}
代码进入活动子主题(或主题)的function.php文件


经过测试并正常工作。

那么什么不正常呢?人们期望什么?顺便说一句,为什么不编辑单一产品页面(很可能是single.php)并在那里添加按钮呢?为什么要使用过滤器?@cjmling我只有10种产品,所以这对服务器来说不是一个很大的负担。这样我就避免了可能的更新重置。我不想让buy按钮将产品放入购物车id,而是想让buy按钮带有自定义链接,而不仅仅是一个文本。我想添加一个功能,以取代购买按钮到自定义URL按钮链接,谢谢。但代码似乎什么也没做。我正在检查它,试图找出它缺少了什么。@Wed我已经在不同的安装上重新测试了我的代码,它工作正常。它在版本3之后的所有Woocommerce版本中都能正常工作(在版本3之前未测试)。因此,问题可能来自您的主题(在woocommerce钩子中进行更改)、一些插件或自定义…您还必须确保您的目标产品类别是ID 64…我正在重新检查functions.php的其余部分,以查看是否存在冲突。