我添加了以下代码,以在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 在结帐页面上工作正常,但是如果产品类别是游戏,我不想运行该代码。
答案 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文件中。未经测试,但应该可以。