我有一个包含父类别和子类别的Woocommerce商店。
例如,父类别是Menswear,它的两个子类别是衬衫和裤子。
我想更改Menswear父类别中所有产品的所有单个产品页面上的“添加到购物车”按钮文本。也就是说,衬衫和裤子子类别中的所有产品。
以下代码实现了这一点,但必须有更好的方法在if语句中使用父类,而不是两个子类。
不幸的是,我不知道该怎么做才有人可以帮忙吗?
add_filter( 'woocommerce_product_single_add_to_cart_text', 'product_cat_single_add_to_cart_button_text', 20, 1 );
function product_cat_single_add_to_cart_button_text( $text ) {
if( has_term( array('shirts','pants'), 'product_cat') )
$text = __( 'Buy Menswear', 'woocommerce' );
return $text;
}
只是为了澄清:
我所希望的是一个解决方案,它使用数组中的父类别(Menswear)而不是子类别Shirts和Pants。在我的网站中,我只有四个父类别,但每个类别都有几十个子类别。我正在寻找一种解决方案,避免必须列出数组中的几十个子类,并且只使用四个父类别。是否可以根据父类别更改添加到购物车文本? (也就是说,属于该父项的子类别中的所有产品都会发生更改。)
进一步澄清:
假设我有四个父类别:红色,黄色,绿色和蓝色。
这些父类别中的每一个都有多个子类别,如下所示:
RED
Red subcat 1
Red subcat 2
YELLOW
Yellow subcat 1
Yellow subcat 2
GREEN
Green subcat 1
Green subcat 2
BLUE
Blue subcat 1
Blue subcat 2
我希望Red subcat 1和Red subcat 2中的产品具有添加到购物车文本BUY RED。
我希望黄色子猫1和黄色子猫2中的产品能够添加到购物车文本中购买黄色。
我希望Green subcat 1和Green subcat 2中的产品添加到购物车文本BUY GREEN。
我希望Blue subcat 1和Blue subcat 2中的产品添加到购物车文本BUY BLUE。
在我的实际网站中,每个父类别都有超过50个子类别,因此将这些列为数组是不切实际的。
感谢为什么我正在寻找一种解决方案,根据父类别更改添加到购物车文本。
更新
基于@LoicTheAztec工作代码(谢谢),这是我的最终工作代码:
// Utility function to get the childs array from all parent categories
function get_the_childs( $product_category ){
$taxonomy = 'product_cat';
$parent = get_term_by( 'slug', sanitize_title( $product_category ), $taxonomy );
return get_term_children( $parent->term_id, $taxonomy );
}
// Changing the add to cart button text for product based on parent category
add_filter( 'woocommerce_product_single_add_to_cart_text', 'product_cat_single_add_to_cart_button_text', 20, 1 );
function product_cat_single_add_to_cart_button_text( $text ) {
global $product;
if( has_term( get_the_childs('reds'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Red', 'woocommerce' );
elseif( has_term( get_the_childs('yellow'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Yellow', 'woocommerce' );
elseif( has_term( get_the_childs('green'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Green', 'woocommerce' );
elseif( has_term( get_the_childs('blue'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Blue', 'woocommerce' );
return $text;
}
进一步更新: 这个解决方案有一个bug。如果其中一个父类别为空,则代码不起作用。
见这里:
Bug in Change Add To Cart button text based on parent product categories in Woo
答案 0 :(得分:0)
<强>更新强>
首先,您将在下面找到一个实用程序函数,以从父产品类别中获取子数组。然后你就可以在你的钩子函数中使用它了。
您可以使用不同的文本按钮处理多个父产品类别。
代码:
// Utility function to get the childs array from a parent product category
function get_the_childs( $product_category ){
$taxonomy = 'product_cat';
$parent = get_term_by( 'slug', sanitize_title( $product_category ), $taxonomy );
return get_term_children( $parent->term_id, $taxonomy );
}
// Changing the add to cart button text
add_filter( 'woocommerce_product_single_add_to_cart_text', 'product_cat_single_add_to_cart_button_text', 20, 1 );
function product_cat_single_add_to_cart_button_text( $text ) {
global $product;
if( has_term( get_the_childs('Menswear'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Menswear', 'woocommerce' );
elseif( has_term( get_the_childs('Womenswear'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Womenswear', 'woocommerce' );
elseif( has_term( get_the_childs('Childswear'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Childswear', 'woocommerce' );
return $text;
}
代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作。
答案 1 :(得分:0)
感谢@LoicTheAztec的投入。
在编辑了他的代码后,我想出了这个。
经过测试和工作。
// Utility function to get the childs array from all parent categories
function get_the_childs( $product_category ){
$taxonomy = 'product_cat';
$parent = get_term_by( 'slug', sanitize_title( $product_category ), $taxonomy );
return get_term_children( $parent->term_id, $taxonomy );
}
// Changing the add to cart button text for product based on parent category
add_filter( 'woocommerce_product_single_add_to_cart_text', 'product_cat_single_add_to_cart_button_text', 20, 1 );
function product_cat_single_add_to_cart_button_text( $text ) {
global $product;
if( has_term( get_the_childs('reds'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Red', 'woocommerce' );
elseif( has_term( get_the_childs('yellow'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Yellow', 'woocommerce' );
elseif( has_term( get_the_childs('green'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Green', 'woocommerce' );
elseif( has_term( get_the_childs('blue'), 'product_cat', $product->get_id() ) )
$text = __( 'Buy Blue', 'woocommerce' );
return $text;
}