Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WooCommerce订阅:检查产品类型是否为简单订阅_Php_Wordpress_Woocommerce_Product_Woocommerce Subscriptions - Fatal编程技术网

Php WooCommerce订阅:检查产品类型是否为简单订阅

Php WooCommerce订阅:检查产品类型是否为简单订阅,php,wordpress,woocommerce,product,woocommerce-subscriptions,Php,Wordpress,Woocommerce,Product,Woocommerce Subscriptions,在WooCommerce中,我使用插件。我主要有可变订阅产品和一些简单订阅产品 我正在使用woocommerce\u dropdown\u variation\u attribute\u options\u argsfilter hook更新我的Variable Subscription产品上的下拉属性值 对于简单订阅产品,我想添加一些条件以允许或拒绝访问产品页面 所以我的问题是:我可以使用哪个钩子来检查产品是否是简单订阅,以允许或拒绝访问该产品 非常感谢您提供的任何帮助/建议。您可以使用WC\

在WooCommerce中,我使用插件。我主要有可变订阅产品和一些简单订阅产品

我正在使用
woocommerce\u dropdown\u variation\u attribute\u options\u args
filter hook更新我的Variable Subscription产品上的下拉属性值

对于简单订阅产品,我想添加一些条件以允许或拒绝访问产品页面

所以我的问题是:我可以使用哪个钩子来检查产品是否是简单订阅,以允许或拒绝访问该产品


非常感谢您提供的任何帮助/建议。

您可以使用
WC\u Subscriptions\u产品的
is\u subscription()
。您需要将is_subscription()函数中的
$product
对象作为参数传递。检查下面的代码

if( WC_Subscriptions_Product::is_subscription( $product ) ) {
    // product is subscription.
} else {
    // product is not subscription.
}
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;
}
更新

使用
woocommerce\u产品\u可见
filter hook从产品目录中删除产品。检查下面的代码

if( WC_Subscriptions_Product::is_subscription( $product ) ) {
    // product is subscription.
} else {
    // product is not subscription.
}
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\u product
对象上检查简单订阅的产品类型,如:

if( $product->get_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
    可变订阅

  • 要针对变体订阅,产品类型slug为:
    subscription\u variation


我需要将此代码放在哪里?在哪里向用户显示产品。
致命错误:未捕获错误:找不到类“WC\u Subscriptions\u Product”
您在哪里使用它?是否有任何挂钩仅用于简单订阅产品,而不是检查if条件?这正是我想要的。非常感谢你的帮助。。这对我很管用。。我不知道是谁否决了我的问题,因为我已经解释了我迄今为止所做和尝试的一切。无论如何。。感谢您的支持和指导。谢谢,先生,如果你能指导我该怎么做,那就太好了。谢谢