IS_PRODUCT_CATEGORY(‘服务’)不工作

时间:2019-11-04 作者:Insight

我想隐藏“添加到购物车”&;“服务”类WooCommerce产品的价格。

我在我的子主题函数中尝试了以下代码。php,但是https://pureblissmoonhealer.com/product-category/services/ 仍然显示“添加到购物车”&;价格

感谢您的帮助。

function insight_hide_price_add_cart_not_logged_in() {   
    if (! is_user_logged_in()) {
        if (is_product_category(\'Services\')) {
            remove_action( \'woocommerce_after_shop_loop_item\', \'woocommerce_template_loop_add_to_cart\', 10 );
            remove_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_add_to_cart\', 30 );
            remove_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_price\', 10 );
            remove_action( \'woocommerce_after_shop_loop_item_title\', \'woocommerce_template_loop_price\', 10 );   
            add_action( \'woocommerce_single_product_summary\', \'insight_print_register_to_see\', 31 );
            add_action( \'woocommerce_after_shop_loop_item\', \'insight_print_register_to_see\', 11 );
        }
    }
}

function insight_print_register_to_see() {
echo \'<a href="\' . get_permalink(wc_get_page_id(\'myaccount\')) . \'">\' . __(\'Register to see prices\', \'theme_name\') . \'</a>\';
}

add_action( \'init\', \'insight_hide_price_add_cart_not_logged_in\' );

2 个回复
最合适的回答,由SO网友:Chetan Vaghela 整理而成

您可以使用以下代码隐藏add to cart &;price 适用于“服务”类别的WooCommerce产品。

// Specific product category archive and shop pages
add_action( \'woocommerce_after_shop_loop_item_title\', \'hide_loop_product_prices\', 1 );
function hide_loop_product_prices(){
    global $product;
    if (! is_user_logged_in()) {

        if(  is_product_category(\'services\') || has_term( \'services\', \'product_cat\', $product->get_id() ) ){
            // Hide prices
            remove_action(\'woocommerce_after_shop_loop_item_title\', \'woocommerce_template_loop_price\', 10 );
            // Hide add-to-cart button
            remove_action(\'woocommerce_after_shop_loop_item\',\'woocommerce_template_loop_add_to_cart\', 10 );

            add_action( \'woocommerce_single_product_summary\', \'insight_print_register_to_see\', 31 );
            add_action( \'woocommerce_after_shop_loop_item\', \'insight_print_register_to_see\', 99 );
       }
       else
       {
            add_action( \'woocommerce_after_shop_loop_item\', \'woocommerce_template_loop_add_to_cart\', 10 );
            add_action(\'woocommerce_after_shop_loop_item_title\', \'woocommerce_template_loop_price\', 10 );

            remove_action(\'woocommerce_single_product_summary\', \'insight_print_register_to_see\', 31);
remove_action(\'woocommerce_after_shop_loop_item\',\'insight_print_register_to_see\', 99 );
       }
    }
}

// Single product pages
add_action( \'woocommerce_single_product_summary\', \'hide_single_product_prices\', 1 );
function hide_single_product_prices(){
    global $product;
    if (! is_user_logged_in()) {
        if(is_product_category(\'services\') || has_term( \'services\', \'product_cat\', $product->get_id() ) ):

            // Hide prices
            remove_action(\'woocommerce_single_product_summary\', \'woocommerce_template_single_price\', 10 );
            // Hide add-to-cart button, quantity buttons (and attributes dorpdowns for variable products)
            if( ! $product->is_type(\'variable\') ){
                remove_action(\'woocommerce_single_product_summary\',\'woocommerce_template_single_add_to_cart\', 30 );
            } else {
                remove_action( \'woocommerce_single_variation\', \'woocommerce_single_variation_add_to_cart_button\', 20 );
            }
            add_action( \'woocommerce_single_product_summary\', \'insight_print_register_to_see\', 31 );

        endif;
    }
}

function insight_print_register_to_see() {
    echo \'<a href="\' . get_permalink(wc_get_page_id(\'myaccount\')) . \'">\' . __(\'Login/Register to see Price\', \'theme_name\') . \'</a>\';
}
我已经测试了这段代码,并且工作得很好。如果这对你有用,请告诉我。

SO网友:Gopala krishnan

希望这个方法对你有帮助。资源表单https://www.skyverge.com/blog/checking-woocommerce-cart-contains-product-category/

function insight_hide_price_add_cart_not_logged_in() {
    $cat_check = false;
    if (! is_user_logged_in()) {
        foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
            $product = $cart_item[\'data\'];
            if ( has_term( \'Services\', \'product_cat\', $product->id ) ) {
                $cat_check = true;
                break;
            }
        }  
        if ( $cat_check ) {
            remove_action( \'woocommerce_after_shop_loop_item\', \'woocommerce_template_loop_add_to_cart\', 10 );
            remove_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_add_to_cart\', 30 );
            remove_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_price\', 10 );
            remove_action( \'woocommerce_after_shop_loop_item_title\', \'woocommerce_template_loop_price\', 10 );   
            add_action( \'woocommerce_single_product_summary\', \'insight_print_register_to_see\', 31 );
            add_action( \'woocommerce_after_shop_loop_item\', \'insight_print_register_to_see\', 11 );
        }   
    }
}

function insight_print_register_to_see() {
    echo \'<a href="\' . get_permalink(wc_get_page_id(\'myaccount\')) . \'">\' . __(\'Register to see prices\',     \'theme_name\') . \'</a>\';
}

add_action( \'init\', \'insight_hide_price_add_cart_not_logged_in\' );

相关推荐

初学者问题:通过管理Web界面访问Functions.php以导入自定义帖子类型?

是否可以访问这些功能。php文件仅仅使用管理web界面?我正在尝试访问以前创建的(手动编码的)自定义帖子类型,我不得不跳过很多障碍,因为我无法访问函数中的代码。php文件。我已经浏览了很多帮助页面,但建议的步骤似乎总是涉及到函数。php文件(我无法访问)或使用插件中的导入/导出工具,该插件首先创建了自定义帖子类型(据我所知,没有使用任何插件)。这似乎是一个非常基本的问题,但我一辈子都想不出来。任何帮助都将不胜感激!