如何实现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
相关产品推荐
相关产品推荐

