WooCommerce 订阅:检查产品类型是否为简单订阅
WooCommerce subscriptions: Check if product type is a simple subscription
对于 WooCommerce,我使用的是 WooCommerce Subscriptions 插件。我主要有可变订阅产品和一些简单的订阅产品。
我正在使用 woocommerce_dropdown_variation_attribute_options_args
过滤器钩子来更新我的 变量订阅 产品的下拉属性值。
对于简单订阅 产品,我想添加一些条件以允许或拒绝访问产品页面。
所以我的问题是:我可以使用哪个钩子来检查产品是否为简单订阅,以允许或拒绝访问该产品?
任何 help/suggestion 将不胜感激。
您可以使用 is_subscription()
个 WC_Subscriptions_Product
。您需要在 is_subscription() 函数中传递 $product
对象作为参数。检查下面的代码。
if( WC_Subscriptions_Product::is_subscription( $product ) ) {
// product is subscription.
} else {
// product is not subscription.
}
更新
使用 woocommerce_product_is_visible
过滤器钩子从产品目录中删除产品。检查下面的代码。
add_filter( 'woocommerce_product_is_visible', 'hide_product_if_is_subscription', 20, 2 );
function hide_product_if_is_subscription( $is_visible, $product_id ){
if( WC_Subscriptions_Product::is_subscription( $product_id ) ) {
$is_visible = false;
}
return $is_visible;
}
您可以在 WC_Product
对象上检查 简单订阅 的产品类型,例如:
if( $product->get_type() === 'subscription' ) {
// Do something
}
或
if( $product->is_type('subscription') ) {
// Do something
}
下面是一个示例用法,它将避免访问简单的订阅产品页面,将客户重定向到主商店页面并显示错误通知:
add_action('template_redirect', 'conditional_single_product_page_access');
function conditional_single_product_page_access(){
// Targeting single product pages
if ( is_product() ) {
$product = wc_get_product( get_the_ID() ); // Get the WC_Product Object
// Targeting simple subscription products
if( $product->get_type() === 'subscription' ) {
wc_add_notice( __("You are not allowed to access this product"), 'error' ); // Notice
wp_safe_redirect( get_permalink( wc_get_page_id( 'shop' ) ) ); // Redirection
exit();
}
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
备注:
要定位 可变订阅 产品类型,请使用 slug variable-subscription
.
要针对 变体订阅,产品类型 slug 是:subscription_variation
.
对于 WooCommerce,我使用的是 WooCommerce Subscriptions 插件。我主要有可变订阅产品和一些简单的订阅产品。
我正在使用 woocommerce_dropdown_variation_attribute_options_args
过滤器钩子来更新我的 变量订阅 产品的下拉属性值。
对于简单订阅 产品,我想添加一些条件以允许或拒绝访问产品页面。
所以我的问题是:我可以使用哪个钩子来检查产品是否为简单订阅,以允许或拒绝访问该产品?
任何 help/suggestion 将不胜感激。
您可以使用 is_subscription()
个 WC_Subscriptions_Product
。您需要在 is_subscription() 函数中传递 $product
对象作为参数。检查下面的代码。
if( WC_Subscriptions_Product::is_subscription( $product ) ) {
// product is subscription.
} else {
// product is not subscription.
}
更新
使用 woocommerce_product_is_visible
过滤器钩子从产品目录中删除产品。检查下面的代码。
add_filter( 'woocommerce_product_is_visible', 'hide_product_if_is_subscription', 20, 2 );
function hide_product_if_is_subscription( $is_visible, $product_id ){
if( WC_Subscriptions_Product::is_subscription( $product_id ) ) {
$is_visible = false;
}
return $is_visible;
}
您可以在 WC_Product
对象上检查 简单订阅 的产品类型,例如:
if( $product->get_type() === 'subscription' ) {
// Do something
}
或
if( $product->is_type('subscription') ) {
// Do something
}
下面是一个示例用法,它将避免访问简单的订阅产品页面,将客户重定向到主商店页面并显示错误通知:
add_action('template_redirect', 'conditional_single_product_page_access');
function conditional_single_product_page_access(){
// Targeting single product pages
if ( is_product() ) {
$product = wc_get_product( get_the_ID() ); // Get the WC_Product Object
// Targeting simple subscription products
if( $product->get_type() === 'subscription' ) {
wc_add_notice( __("You are not allowed to access this product"), 'error' ); // Notice
wp_safe_redirect( get_permalink( wc_get_page_id( 'shop' ) ) ); // Redirection
exit();
}
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
备注:
要定位 可变订阅 产品类型,请使用 slug
variable-subscription
.要针对 变体订阅,产品类型 slug 是:
subscription_variation
.