如何向WooCommerce购物车添加可正常选择的自定义配送方式
WooCommerce自定义配送方式无法生效修复方案
核心问题
你提供的代码存在3个直接导致无法正常工作的问题:
- 代码包含HTML转义字符:
>、"是网页渲染后的转义符号,直接放入PHP文件会触发语法错误,代码无法正常运行 - 缺失实例设置表单方法:你声明了支持配送区域的实例设置,但没有实现
init_form_fields方法定义配置项,后台设置无法正常保存 - 配置参数硬编码:配送方式标题、启用状态都写死在代码中,没有读取后台的实例配置,修改后台参数不会生效
修复后可用代码
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) { function costs_specified_init() { if ( ! class_exists( 'Shipping_Costs_Will_BE_Specified' ) ) { class Shipping_Costs_Will_BE_Specified extends WC_Shipping_Method { /** * 配送方式构造函数 * @access public * @return void */ public function __construct($instance_id = 0) { $this->id = 'specified_price'; $this->method_title = __( '指定配送价格' ); $this->method_description = __( '用于自定义指定区域的配送价格' ); $this->instance_id = absint($instance_id); $this->supports = array( 'shipping-zones', 'instance-settings', 'instance-settings-modal', ); $this->init(); // 读取实例配置 $this->title = $this->get_option('title'); $this->enabled = 'yes'; } /** * 初始化配置 * @access public * @return void */ function init() { $this->init_form_fields(); $this->init_settings(); add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) ); } /** * 定义后台配置表单字段 * @access public * @return void */ public function init_form_fields() { $this->instance_form_fields = array( 'title' => array( 'title' => __('配送方式名称'), 'type' => 'text', 'default' => __('指定配送价格'), 'desc_tip' => true, 'description' => __('前端购物车、结算页显示给用户的配送方式名称'), ), 'cost' => array( 'title' => __('配送费用'), 'type' => 'price', 'default' => '0', 'desc_tip' => true, 'description' => __('该配送方式的运费金额'), ) ); } /** * 计算运费 * @access public * @param mixed $package * @return void */ public function calculate_shipping( $package = array() ) { $rate = array( 'label' => $this->title, 'cost' => $this->get_option('cost', 0), 'calc_tax' => 'per_item' ); $this->add_rate( $rate ); } } } } add_action( 'woocommerce_shipping_init', 'costs_specified_init' ); function add_your_shipping_method( $methods ) { $methods['specified_price'] = 'Shipping_Costs_Will_BE_Specified'; return $methods; } add_filter( 'woocommerce_shipping_methods', 'add_your_shipping_method' ); }
生效操作步骤
- 将修复后的代码放入主题functions.php文件,或者自定义插件的主文件中
- 进入WooCommerce后台→设置→配送,找到目标配送区域,点击「添加配送方式」,选择「指定配送价格」后保存
- 点击该配送方式右侧的编辑按钮,设置前端显示名称、配送费用后保存配置
- 清理网站缓存后测试:用户收货地址属于该配送区域时,购物车、结算页会自动渲染该配送方式的单选选项,无需额外开发前端代码
内容的提问来源于stack exchange,提问作者Kristaps Vētra
相关产品推荐
相关产品推荐

