Php 如果用户将某个类别的产品添加到购物车,则重定向

Php 如果用户将某个类别的产品添加到购物车,则重定向,php,wordpress,redirect,filter,woocommerce,Php,Wordpress,Redirect,Filter,Woocommerce,我正在使用woocommerce和wordpress进行一个项目,我需要在其中实现一个特定的功能。该项目要求某些产品标记为租赁。如果用户添加了具有租赁类别的产品,则用户将被重定向到一个页面,该页面包含要填写的联系人表单,该表单将自动包含该产品的sku。不得将产品添加到购物车中 我试着使用过滤器,添加到购物车重定向。我检查了产品是否属于某一类别,如果属于某一类别,它将被重定向到联系人页面。问题是产品已添加到购物车中 add_filter( 'woocommerce_add_to_cart_redi

我正在使用woocommerce和wordpress进行一个项目,我需要在其中实现一个特定的功能。该项目要求某些产品标记为租赁。如果用户添加了具有租赁类别的产品,则用户将被重定向到一个页面,该页面包含要填写的联系人表单,该表单将自动包含该产品的sku。不得将产品添加到购物车中

我试着使用过滤器,添加到购物车重定向。我检查了产品是否属于某一类别,如果属于某一类别,它将被重定向到联系人页面。问题是产品已添加到购物车中

add_filter( 'woocommerce_add_to_cart_redirect', 'rv_redirect_on_add_to_cart' );
function rv_redirect_on_add_to_cart() {
//Get product ID
if ( isset( $_POST['add-to-cart'] ) ) {

    $product_id = (int) apply_filters( 'woocommerce_add_to_cart_product_id', $_POST['add-to-cart'] );

    //Check if product ID is in the proper taxonomy and return the URL to the redirect product
    if ( has_term( 'rental', 'product_cat', $product_id ) ){
        $product = wc_get_product( $product_id );
        $_POST['rental-product-sku'] = $product->get_sku();
        return get_permalink( get_page_by_path( 'rent-a-book' ) );
    }   
}
}
因此,我尝试使用自定义验证来检查产品是否属于该类别,如果属于该类别,则返回false

add_action( 'woocommerce_add_to_cart_validation', 'add_the_date_validation', 11, 2 ); 
function add_the_date_validation($passed, $product_id ) {
    $terms = wp_get_post_terms( $product_id, 'product_cat' );

    foreach ( $terms as $term ) $categories[] = $term->slug;
    if(count($categories) == 0){
        return true;
    }
    if ( in_array( 'rental', $categories ) ) {
        return false;
    } else {
        return true;
    }
    return true;
}
问题是,如果验证返回false,则不会加载重定向筛选器,也不会将用户重定向到联系人页面。我已经研究了一段时间了,但我的尝试没有成功。有人能帮我吗


谢谢

为什么不这样做呢

add_action( 'woocommerce_add_to_cart_validation', 'add_the_date_validation', 11, 2 ); 
function add_the_date_validation( $passed, $product_id ) {

    if ( has_term( 'rental', 'product_cat', $product_id ) ){
        // $product = wc_get_product( $product_id );
        // $_POST['rental-product-sku'] = $product->get_sku(); 
        wp_safe_redirect(get_permalink( get_page_by_path( 'rent-a-book' ) ) );
        exit();
    }
    return $passed;
}

为什么不这样做呢

add_action( 'woocommerce_add_to_cart_validation', 'add_the_date_validation', 11, 2 ); 
function add_the_date_validation( $passed, $product_id ) {

    if ( has_term( 'rental', 'product_cat', $product_id ) ){
        // $product = wc_get_product( $product_id );
        // $_POST['rental-product-sku'] = $product->get_sku(); 
        wp_safe_redirect(get_permalink( get_page_by_path( 'rent-a-book' ) ) );
        exit();
    }
    return $passed;
}

谢谢你的回复,但是没有用。我想如果验证返回false,重定向根本就不起作用,即使在同一个函数中也是如此。我不确定你是否像我那样做。。。wp_safe_redirect在上述函数中找到,如果您提供的链接正确,它将重定向您的页面。。。上面的函数将跳过验证过程。我做了一些故障排除。我认为wp_-safe_重定向不起作用。我想我找到了一个解决方案,添加了exit;在wp_-safe_重定向使页面重定向到我想要的页面之后。我会把它标为正确答案,但我认为你应该加上退出;在重定向之后。非常感谢你的回复,但是没有用。我想如果验证返回false,重定向根本就不起作用,即使在同一个函数中也是如此。我不确定你是否像我那样做。。。wp_safe_redirect在上述函数中找到,如果您提供的链接正确,它将重定向您的页面。。。上面的函数将跳过验证过程。我做了一些故障排除。我认为wp_-safe_重定向不起作用。我想我找到了一个解决方案,添加了exit;在wp_-safe_重定向使页面重定向到我想要的页面之后。我会把它标为正确答案,但我认为你应该加上退出;在重定向之后。非常感谢