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

如何实现WordPress每日自动更新保存WooCommerce黄金价格插件表单

实现方案

直接使用WordPress自带的WP Cron定时任务体系即可,无需模拟表单提交,直接调用WordPress原生option操作函数即可完成自动保存,步骤如下:

步骤1:重构代码,单独封装金价计算逻辑

把原来写在表单渲染函数里的拉取、计算金价逻辑单独抽成公共函数,方便表单渲染和定时任务同时复用:

// 单独封装拉取计算最新金价的逻辑
function woo_gold_price_calculate_latest() {
    // 拉取外部金价数据
    $json = file_get_contents('https://data-asg.goldprice.org/dbXRates/EUR');
    $decoded = json_decode($json);
    if (empty($decoded->items)) return false; // 拉取失败直接返回
    
    $item = $decoded->items;
    $karats = [];
    $karats['24k'] = ($item[0]->xauPrice * 32.1507466);
    $karats['22k'] = ($karats['24k'] * 0.9166);
    $karats['20k'] = ($karats['24k'] * 0.833);
    $karats['18k'] = ($karats['24k'] * 0.75);
    $karats['14k'] = ($karats['24k'] * 0.583);
    
    return $karats;
}

步骤2:修改原有表单渲染函数

替换原有逻辑,调用封装好的计算函数,避免冗余代码:

function woocommerce_gold_price_fields() {
    $karats          = get_option( 'woocommerce_gold_price_options' );
    // 后台打开选项页时也可以拉取最新价格展示,不需要可以去掉该行
    $latest_karats = woo_gold_price_calculate_latest();
    if ($latest_karats) $karats = $latest_karats;
    
    $currency_pos    = get_option( 'woocommerce_currency_pos' );
    $currency_symbol = get_woocommerce_currency_symbol();
    // 剩下原来的表单渲染代码保持不变即可
    // ...
}

步骤3:添加定时任务注册与执行逻辑

把下面这段代码加到你的插件代码或者主题functions.php文件中即可:

// 注册每日定时任务
add_action('wp', 'woo_gold_price_register_daily_cron');
function woo_gold_price_register_daily_cron() {
    if (!wp_next_scheduled('woo_gold_price_daily_update')) {
        // 可自定义执行时间,这里默认每天当前时间执行一次
        wp_schedule_event(time(), 'daily', 'woo_gold_price_daily_update');
    }
}

// 定时任务执行的更新逻辑
add_action('woo_gold_price_daily_update', 'woo_gold_price_do_update');
function woo_gold_price_do_update() {
    $latest_karats = woo_gold_price_calculate_latest();
    if ($latest_karats) {
        // 直接更新选项,等价于手动点击保存更改
        update_option('woocommerce_gold_price_options', $latest_karats);
    }
}

// 停用插件时清理定时任务,可选添加
register_deactivation_hook(__FILE__, 'woo_gold_price_clear_cron');
function woo_gold_price_clear_cron() {
    $timestamp = wp_next_scheduled('woo_gold_price_daily_update');
    wp_unschedule_event($timestamp, 'woo_gold_price_daily_update');
}

可选优化:配置系统级定时任务提升执行准确性

WP Cron默认依赖站点访问触发,访问量低的站点可能出现执行时间不准的问题,可做如下优化:

  • 打开站点根目录的wp-config.php文件,添加一行配置关闭默认WP Cron触发:
    define('DISABLE_WP_CRON', true);
  • 进入服务器后台配置系统定时任务,每日固定时间触发WordPress Cron入口即可,示例配置(每天零点执行):
    0 0 * * * wget -q -O - https://你的域名/wp-cron.php?doing_wp_cron >/dev/null 2>&1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:27:03