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

