WordPress/WooCommerce指定商品仅售乌克兰+WPML兼容自定义报错
WooCommerce 境内专属商品结账限制解决方案
以下是可直接添加到主题functions.php的代码片段,已添加详细注释,满足你的需求:
// 检测购物车中是否包含仅乌克兰境内销售的商品 function has_only_ukraine_products_in_cart() { // 购物车为空时直接返回false if ( WC()->cart->is_empty() ) { return false; } // 遍历购物车所有商品 foreach ( WC()->cart->get_cart() as $cart_item ) { $product = $cart_item['data']; // 获取商品自定义字段值(需在产品编辑页添加键为only_ukraine_sale的字段,值设为yes) $only_ukraine = get_post_meta( $product->get_id(), 'only_ukraine_sale', true ); // 找到符合条件的商品则返回true if ( $only_ukraine === 'yes' ) { return true; } } return false; } // 限制结账页账单国家仅显示乌克兰(当购物车含境内专属商品时) function restrict_billing_country_to_ukraine( $countries ) { // 仅在结账页且满足条件时生效 if ( is_checkout() && has_only_ukraine_products_in_cart() ) { // 仅保留乌克兰选项(国家代码UA对应乌克兰) return array( 'UA' => $countries['UA'] ); } // 其他情况返回原国家列表 return $countries; } add_filter( 'woocommerce_countries', 'restrict_billing_country_to_ukraine', 10, 1 ); // 获取购物车中所有境内专属商品的名称 function get_only_ukraine_product_names() { $product_names = array(); if ( WC()->cart->is_empty() ) { return $product_names; } foreach ( WC()->cart->get_cart() as $cart_item ) { $product = $cart_item['data']; $only_ukraine = get_post_meta( $product->get_id(), 'only_ukraine_sale', true ); if ( $only_ukraine === 'yes' ) { // 收集商品名称 $product_names[] = $product->get_name(); } } // 转为逗号分隔的字符串 return implode( ', ', $product_names ); } // 在结账页账单国家字段下方显示可翻译的提示信息 function display_only_ukraine_product_notice() { // 仅在结账页且满足条件时显示 if ( is_checkout() && has_only_ukraine_products_in_cart() ) { $product_names = get_only_ukraine_product_names(); // 使用WPML兼容的翻译函数,替换占位符为商品名称 // 注意:将textdomain替换为你的主题/插件的文本域(比如主题的文本域可在style.css中找到) $notice = sprintf( __( '抱歉,%s无法配送至乌克兰境外', 'textdomain' ), $product_names ); // 输出WooCommerce风格的提示信息 echo '<div class="woocommerce-error" role="alert">' . esc_html( $notice ) . '</div>'; } } add_action( 'woocommerce_before_checkout_billing_form', 'display_only_ukraine_product_notice', 15 );
使用说明:
- 添加代码:登录WordPress后台,进入「外观 > 主题文件编辑器」,找到当前主题的
functions.php,将上述代码粘贴到文件末尾;或通过FTP访问主题目录,编辑functions.php文件。 - 标记商品:编辑仅乌克兰境内销售的商品,在「自定义字段」区域添加字段:
- 键:
only_ukraine_sale - 值:
yes
(若看不到自定义字段,点击右上角「选项」,勾选「自定义字段」即可显示)
- 键:
- WPML翻译:进入WPML的「字符串翻译」界面,查找
textdomain对应的字符串,即可进行多语言翻译(记得把代码中的textdomain替换为你主题的实际文本域,可在主题根目录的style.css文件中找到)
内容的提问来源于stack exchange,提问作者Andrii
相关产品推荐
相关产品推荐

