如何在WooCommerce插件中访问Settings数组及配置值?
WooCommerce插件设置项访问问题解答
一、代码逻辑解释
你看到的$settings数组被覆盖是正常设计逻辑,以下是这段代码的实际作用:
- 类
AutocompleteOrdersWooSetting核心功能:通过WooCommerce钩子注册自定义结账设置分区及字段- 构造函数注册两个关键钩子:
woocommerce_get_sections_checkout:在WooCommerce结账设置页面添加新的分区标签woocommerce_get_settings_checkout:渲染自定义分区内的具体设置字段
AcoAutocompleteOrdersaddSection方法:向结账设置的分区列表中添加「Autocomplete Orders」分区AcoAutocompleteOrdersSetting方法:- 当当前访问的是自定义的
aco_autocomplete_orders分区时,重置$settings数组——这是为了清空其他分区的字段,只显示我们自定义的设置项 - 依次添加各类设置字段:分区标题、「Virtual Products Only」复选框、支付网关对应复选框、SKU过滤文本框、订单状态转换下拉选单等
- 添加分区结束标记后返回自定义的
$settings数组;如果是其他分区,则直接返回原$settings数组,不影响原有设置
- 当当前访问的是自定义的
- 构造函数注册两个关键钩子:
二、获取配置值并在主脚本中使用的方法
WooCommerce会自动将设置项的值存储到WordPress的选项表中,每个设置项的id就是对应的选项名称,直接使用WordPress内置函数get_option()即可获取:
单个配置值获取示例
- 获取「Virtual Products Only」复选框的值:
get_option('aco_vpo')(选中时返回yes,未选中返回false或空值) - 获取SKU过滤文本框的值:
get_option('aco_exsku') - 获取「change Processing to」下拉选单的值:
get_option('aco_processing')
main.php中使用示例
// 确保WooCommerce已加载后再获取设置 if (class_exists('WooCommerce')) { // 获取虚拟产品仅启用设置 $virtual_only = get_option('aco_vpo'); if ($virtual_only === 'yes') { // 执行对应业务逻辑 } // 获取SKU过滤规则 $ex_sku_rule = get_option('aco_exsku'); if (!empty($ex_sku_rule)) { // 基于SKU规则处理订单逻辑 } // 获取Processing状态转换目标 $processing_target = get_option('aco_processing'); if (!empty($processing_target)) { // 执行订单状态转换逻辑 } }
注意:确保在调用get_option()时,WordPress的初始化流程已完成,可将逻辑放在plugins_loaded或woocommerce_init钩子中执行,避免在插件文件最顶部直接调用
内容的提问来源于stack exchange,提问作者KalebSmith
相关产品推荐
相关产品推荐

