WooCommerce根据产品类别显示结帐字段

时间:2018-11-12 06:37:04

标签: php wordpress woocommerce

我添加了以下代码,以在WooCommerce结帐页面上显示货币切换器下拉菜单,此操作正常,但如果有人从“游戏”类别添加了产品并且仅使用默认商店货币,我不想显示货币切换器字段

代码1

tableView.isEmptyRowsHidden = true

基于以下答案线程:Checking cart items for a product category in Woocommerce 我尝试使用下面的代码,但我认为缺少一些东西,如果我使用下面的代码,即使产品来自“游戏”或其他类别,也根本不会显示货币切换器。

代码2

add_action('woocommerce_before_checkout_billing_form', 'wps_add_select_checkout_field');
function wps_add_select_checkout_field( $checkout ) {
    echo '<label for="payment_option" class="payment_option">'.__('Preferred currency').'</label>';
    echo '<div class="own">', do_shortcode('[woocs]'), '</div>';
    return $checkout;
}

//* Process the checkout
add_action('woocommerce_checkout_process', 'wps_select_checkout_field_process');
function wps_select_checkout_field_process() {
    global $woocommerce;
    // Check if set, if its not set add an error.
    if ($_POST['payopt'] == "blank")
     wc_add_notice( '<strong>Please select a currency</strong>', 'error' );
}

您还有其他建议吗?在哪里可以根据购物车产品类别在结帐页面上添加货币切换器。 代码1 在结帐页面上工作正常,但是如果产品类别是游戏,我不想运行该代码。

1 个答案:

答案 0 :(得分:1)

您使用的钩子不正确,因为woocommerce_before_cart动作钩子仅在购物车页面中触发,而在结帐时未触发,因此无法正常工作。而是尝试使用以下内容:

// Utility function that checks if at least a cart items remains to a product category
function has_product_category_in_cart( $product_category ) {
    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // If any product category is found in cart items
        if ( has_term( $product_category, 'product_cat', $cart_item['product_id'] ) ) {
            return true;
        }
    }
    return false;
}

// Add a custom select field in checkout
add_action('woocommerce_before_checkout_billing_form', 'add_custom_checkout_select_field');
function add_custom_checkout_select_field( $checkout ) {
    // Here set in the function your product category term ID, slugs, names or array
    if ( ! has_product_category_in_cart( 'games' ) && shortcode_exists( 'woocs' ) ) {
        echo '<label for="payment_option" class="payment_option">'.__('Preferred currency').'</label>';
        echo '<div class="own">' . do_shortcode('[woocs]') . '</div>';
    }
}

// Custom Checkout fields validation
add_action('woocommerce_checkout_process', 'custom_checkout_select_field_validation');
function custom_checkout_select_field_validation() {
    if ( isset($_POST['payopt']) && empty($_POST['payopt']) )
        wc_add_notice( '<strong>Please select a currency</strong>', 'error' );
}

代码进入您的活动子主题(活动主题)的function.php文件中。未经测试,但应该可以。