为WP Cron编写一个函数以每天运行一个SQL命令

时间:2020-09-12 作者:Daniel McMahon

我通常在中使用事件管理器PHP MyAdmin 要设置计划的事件,但由于迁移到WP引擎,他们不允许这样做,因此我必须编写一个要使用的函数WP Cron 相反作为WP函数编写时应该是什么样子?

我有SQL命令:

UPDATE wp_postmeta SET meta_value = \'4 hours\' WHERE wp_postmeta.meta_id = 65138;
我需要运行它recurring, 例如

每周一上午9点

UPDATE wp_postmeta SET meta_value = \'4 hours\' WHERE wp_postmeta.meta_id = 65138;
星期二上午9点

UPDATE wp_postmeta SET meta_value = \'8 hours\' WHERE wp_postmeta.meta_id = 65138;
星期三上午9点

UPDATE wp_postmeta SET meta_value = \'4 hours\' WHERE wp_postmeta.meta_id = 65138;
星期五上午9点

UPDATE wp_postmeta SET meta_value = \'16 hours\' WHERE wp_postmeta.meta_id = 65138;
(我跟着this answer 首先是关于wpdb美元,但我对它不是很满意,它可能已经过时了。)

1 个回复
最合适的回答,由SO网友:Cyclonecode 整理而成

这个wp-crontrol 插件允许您添加新的cron事件以及新的cron计划。创建新事件时,需要提供要使用的动作挂钩的名称。我想最简单的方法就是在你的主题中设置一个钩子function.php 文件:

function update_meta_data($meta_id, $meta_value) {
  global $wpdb;
  $wpdb->update(
    $wpdb->prefix . \'postmeta\',
    array(\'meta_value\' => $meta_value),
    array(\'meta_id\' => $meta_id),
    array(\'%s\'),
    array(\'%d\')
  );
}
// Here we are setting up the action hook, notice that we also specify that the
// function takes two arguments.
add_action(\'cron_update_meta_data\', \'update_meta_data\', 10, 2);
然后使用wp-crontrol 插件您可以为每个间隔创建单独的事件:

钩子名称-将是动作钩子的名称,例如cron_update_meta_data.[65138, \'4 hours\'] 对于第一个事件同样值得注意的是wp-cron.php 只有当有人访问你的网站时才会执行,所以根据cron事件在指定时间实际运行的重要性,你可以设置一个真正的cron作业,然后执行wp-cron.php:

0 09 * * TUE curl http://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1