从 WooCommerce 中的税 class 过滤器挂钩中排除特定产品变体
Exclude specific product variation from tax class filter hook in WooCommerce
我正在尝试按角色在 wordpress 过滤器中应用特定税 class。此税 class 适用于变体产品以及常规单一产品。我只需要通过 id 排除特定的变体产品或生产变体。
这是我目前所拥有的:
function wc_diff_rate_for_user( $tax_class, $product ) {
$user_id = get_current_user_id();
$user = get_user_by( 'id', $user_id );
if ( is_user_logged_in() && ! empty( $user ) && in_array( 'MEMBER', $user->roles ) && is_product() && get_the_id() != 1337) {
$tax_class = 'Reduced rate';
}
return $tax_class;
}
add_filter( 'woocommerce_product_get_tax_class', 'wc_diff_rate_for_user', 1, 2 );
add_filter( 'woocommerce_product_variation_get_tax_class', 'wc_diff_rate_for_user', 1, 2 );
我认为我在以下部分失败了:
is_product() && get_the_id() != 1337)
因为 'Reduced rate' 的 class 税适用于所有产品,包括我试图排除的产品。
任何建议将不胜感激。
代码中的主要问题是 get_the_id()
无法在单个 可变产品 页面上用于产品变体 因为它给出了可变产品 ID 但没有提供任何产品变体 ID...
正如您在代码中看到的那样,挂钩函数有 2 个可用参数,因此您可以使用变量 $product
通过方法 get_id()
从中获取 Id,如下所示:
add_filter( 'woocommerce_product_get_tax_class', 'change_tax_class_user_role', 10, 2 );
add_filter( 'woocommerce_product_variation_get_tax_class', 'change_tax_class_user_role', 10, 2 );
function change_tax_class_user_role( $tax_class, $product ) {
$excluded_variation_id = 1337;
$targeted_user_role = 'MEMBER';
if ( $product->is_type('variation') && $product->get_id() == $excluded_variation_id ) {
return $tax_class;
}
elseif ( current_user_can( $targeted_user_role ) ) {
return 'Reduced rate';
}
return $tax_class;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。它应该有效。
我正在尝试按角色在 wordpress 过滤器中应用特定税 class。此税 class 适用于变体产品以及常规单一产品。我只需要通过 id 排除特定的变体产品或生产变体。 这是我目前所拥有的:
function wc_diff_rate_for_user( $tax_class, $product ) {
$user_id = get_current_user_id();
$user = get_user_by( 'id', $user_id );
if ( is_user_logged_in() && ! empty( $user ) && in_array( 'MEMBER', $user->roles ) && is_product() && get_the_id() != 1337) {
$tax_class = 'Reduced rate';
}
return $tax_class;
}
add_filter( 'woocommerce_product_get_tax_class', 'wc_diff_rate_for_user', 1, 2 );
add_filter( 'woocommerce_product_variation_get_tax_class', 'wc_diff_rate_for_user', 1, 2 );
我认为我在以下部分失败了:
is_product() && get_the_id() != 1337)
因为 'Reduced rate' 的 class 税适用于所有产品,包括我试图排除的产品。
任何建议将不胜感激。
代码中的主要问题是 get_the_id()
无法在单个 可变产品 页面上用于产品变体 因为它给出了可变产品 ID 但没有提供任何产品变体 ID...
正如您在代码中看到的那样,挂钩函数有 2 个可用参数,因此您可以使用变量 $product
通过方法 get_id()
从中获取 Id,如下所示:
add_filter( 'woocommerce_product_get_tax_class', 'change_tax_class_user_role', 10, 2 );
add_filter( 'woocommerce_product_variation_get_tax_class', 'change_tax_class_user_role', 10, 2 );
function change_tax_class_user_role( $tax_class, $product ) {
$excluded_variation_id = 1337;
$targeted_user_role = 'MEMBER';
if ( $product->is_type('variation') && $product->get_id() == $excluded_variation_id ) {
return $tax_class;
}
elseif ( current_user_can( $targeted_user_role ) ) {
return 'Reduced rate';
}
return $tax_class;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。它应该有效。