You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中WooCommerce ZarinPal网关标题修改及重复选项问题

问题分析与解决办法

为啥会出现嵌套的同名选项?

你写的代码错在多套了一层数组结构:

  • get_option('woocommerce_WC_ZPal_settings') 已经直接拿到了这个网关设置的完整数组(就是原插件输出里那串序列化内容对应的PHP数组)。
  • 结果你又给这个数组加了个woocommerce_WC_ZPal_settings的键,再把这个嵌套数组存回去,导致设置值变成了['woocommerce_WC_ZPal_settings' => ['title' => 'test']]这种结构,看起来像是有两个同名选项,其实是你多套了一层不必要的层级。

正确修改网关标题的方法

先确认选项名是否正确

Woocommerce网关的设置选项名格式是woocommerce_{网关ID}_settings,你的网关类叫Woocommerce_Add_ZarinPal_Gateway,正常来说网关ID会是woocommerce_add_zarinpal_gateway,对应选项名是woocommerce_woocommerce_add_zarinpal_gateway_settings。不过从你给的原插件输出看,woocommerce_WC_ZPal_settings确实是存在的,那就先用这个选项名来改。

修正代码,去掉多余层级

直接修改原数组里的title键就行,不用多套一层:

// 获取网关的设置数组
$my_options = get_option('woocommerce_WC_ZPal_settings');
// 先判断是不是数组,避免报错
if (is_array($my_options)) {
    // 直接修改title值
    $my_options['title'] = 'test';
    // 把修改后的数组存回去
    update_option('woocommerce_WC_ZPal_settings', $my_options);
}

验证修改结果

改完之后用var_dump(get_option('woocommerce_WC_ZPal_settings'))查看输出,应该能看到原来的所有设置项里,title已经变成test,不会再出现嵌套的同名键了。

更规范的修改方式(推荐)

别直接操作数据库选项,用Woocommerce官方的钩子来改更稳妥:

add_filter('woocommerce_gateway_settings_WC_ZPal', 'custom_change_zarinpal_title');
function custom_change_zarinpal_title($settings) {
    foreach ($settings as &$field) {
        // 找到标题对应的设置项
        if ($field['id'] === 'woocommerce_WC_ZPal_title') {
            // 修改默认显示的标题
            $field['default'] = 'test';
        }
    }
    return $settings;
}

要是你能编辑网关的源代码,直接改类里的标题更简单:找到Woocommerce_Add_ZarinPal_Gateway类的构造函数,把$this->title = 'پرداخت امن زرین پال';改成$this->title = 'test';就行。

内容的提问来源于stack exchange,提问作者arena arens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:15:50