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

如何让WP All Import根据数据库字段值决定是否执行定时导入?

通过数据库字段管控WP All Import定时导入任务的执行状态

当然可以通过数据库字段控制WP All Import定时任务的执行,而且比你考虑的wp_all_import_is_post_to_update更高效——后者是针对单条帖子更新的判断,而我们需要在整个导入任务启动前就决定是否跳过,用wp_all_import_before_import钩子更合适。

实现思路

WP All Import的每个导入任务本质是pmxi_import类型的自定义帖子,你可以给每个任务绑定一个数据库字段(自定义字段或wp_options表存储)作为开关,在任务启动前读取该字段值,判断是否执行导入。

代码实现

以下是两种常见存储方案的代码:

方案1:用任务的自定义字段存储启用状态

给每个WP All Import任务添加import_enabled自定义字段,值为1表示启用,0表示禁用:

add_action('wp_all_import_before_import', 'check_import_status_before_run', 10, 2);
function check_import_status_before_run($import_id, $import_data) {
    // 获取当前任务的启用状态,默认启用(避免字段不存在时误停)
    $is_enabled = get_post_meta($import_id, 'import_enabled', true) ?: '1';
    
    if ($is_enabled !== '1') {
        // 记录日志(可选,方便排查)
        error_log('WP All Import任务ID ' . $import_id . ' 因状态禁用被跳过');
        // 终止本次导入
        wp_all_import_abort('任务已禁用,跳过导入');
    }
}

方案2:用wp_options表存储启用状态

如果习惯集中管理开关,可以在wp_options表中按任务ID命名选项,比如wpai_import_{ID}_enabled:

add_action('wp_all_import_before_import', 'check_import_status_before_run', 10, 2);
function check_import_status_before_run($import_id, $import_data) {
    // 获取当前任务的启用状态,默认启用
    $option_key = 'wpai_import_' . $import_id . '_enabled';
    $is_enabled = get_option($option_key, '1');
    
    if ($is_enabled !== '1') {
        error_log('WP All Import任务ID ' . $import_id . ' 因状态禁用被跳过');
        wp_all_import_abort('任务已禁用,跳过导入');
    }
}

怎么设置开关状态

  • 自定义字段方案:在WP后台找到「所有导入」页面,点击对应任务的「编辑」,在编辑页面底部的自定义字段区域添加import_enabled字段,设置值为1或0。
  • wp_options方案:可以用数据库管理工具(如PhpMyAdmin)插入选项,或者用代码批量设置,比如:
// 禁用任务ID为5的导入任务
update_option('wpai_import_5_enabled', '0');

为什么不用wp_all_import_is_post_to_update

这个钩子是在处理单条帖子更新时触发,需要遍历每一条待导入的帖子判断,效率远不如在任务启动前直接终止整个流程。而且如果任务本身是新增帖子,这个钩子甚至不会触发,无法达到管控整个任务的目的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:45:42