Разрешить оформление заказа только тогда, когда товар обязательной категории находится в корзине

Я хотел бы остановить любого покупателя, переходящего к оформлению заказа, если у него нет определенной категории продукта в их корзине. Я также хотел бы сообщить им с сообщением об ошибке, что они должны добавить определенный продукт. Я нашел какой-то код, но он не может работать. Я добавил его в качестве фрагмента кода в мою установку Wordpress, но, увы, он не работает, и нет сообщений об ошибках, даже если у меня включена отладка. Вот код, который я нашел в Github, который может нуждаться в модификации, чтобы это работало:

function sv_wc_prevent_checkout_for_category() {

    // set the slug of the category for which we disallow checkout
    $category = 'sibling';

    // get the product category
    $product_cat = get_term_by( 'slug', $category, 'product_cat' );

    // sanity check to prevent fatals if the term doesn't exist
    if ( is_wp_error( $product_cat ) ) {
        return;
    }

    $category_name = '<a href="' . get_term_link( $category, 'product_cat' ) . '">' . $product_cat->name . '</a>';

    // check if this category is the only thing in the cart
    if ( sv_wc_is_category_alone_in_cart( $category ) ) {

        // render a notice to explain why checkout is blocked
        wc_add_notice( sprintf( 'Hi there! Looks like your cart only contains products from the %1$s category &ndash; you must purchase a product from another category to check out.', $category_name ), 'error' );
    }
}
add_action( 'woocommerce_check_cart_items', 'sv_wc_prevent_checkout_for_category' );

/**
 * Checks if a cart contains exclusively products in a given category
 * 
 * @param string $category the slug of the product category
 * @return bool - true if the cart only contains the given category
 */
function sv_wc_is_category_alone_in_cart( $category ) {

    // check each cart item for our category
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

        // if a product is not in our category, bail out since we know the category is not alone
        if ( ! has_term( $category, 'product_cat', $cart_item['data']->id ) ) {
            return false;
        }
    }

    // if we're here, all items in the cart are in our category
    return true;
}

Поэтому я хочу прекратить оформление заказа (с сообщением об ошибке), если категория «брат» - это единственный товар в корзине. У меня есть «стандартная» категория, которая должна быть в корзине, прежде чем покупатель доберется до оформления заказа. Надеюсь, это имеет смысл.

Ответы на вопрос(2)

Ваш ответ на вопрос