使用WP cron作业同步用户元字段

时间:2018-11-20 作者:Gamal Elwazeery

我正在搜索如何使用wp cron job每月同步两个用户元字段。我正在使用一个名为“SyncFields”的非常棒的插件,它可以自动运行,但我每个月都在寻找同步。

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

如果要删除原始插件的功能,请尝试将其添加到主题的功能中。php文件

function add_thirty_day_cron($schedules) {
  $schedules[\'thirtydays\'] = array( \'interval\' => 30 * DAY_IN_SECONDS, \'display\' => __( \'Every 30 days\') );
  return $schedules;
}
add_filter(\'cron_schedules\',\'add_thirty_day_cron\');//adds 30 day interval
add_action(\'do_meta_sync\', \'my_meta_sync\');//hook for cron
function my_meta_sync() {
  if (function_exists(\'msf_action_callback\')) msf_action_callback();
}
function modify_syncfields_sync() {
  remove_action(\'edit_user_profile_update\', \'msf_action_callback\');
  remove_action(\'profile_update\', \'msf_action_callback\');
}
add_action(\'plugins_loaded\',\'modify_syncfields_sync\');//removes plugin actions
add_action(\'wp_loaded\',\'add_my_sync_cron\');//schedules cron
function add_my_sync_cron() {
  if (!wp_next_scheduled(\'do_meta_sync\')) wp_schedule_event(time(), \'thirtydays\', \'do_meta_sync\');
}
如果你不想再使用这个插件,这里有两个选项。第一个将从下个月的第一天开始,每三十天运行一次。

function my_meta_sync() {
    $users = get_users();
    foreach ($users as $user) {
        $meta = get_user_meta( $user->ID );
        if ($meta[\'firstname\'][0] != $meta[\'billing_firstname\'][0]) update_user_meta( $user->ID, $meta[\'billing_firstname\'][0], $meta[\'firstname\'][0] );
    }
}
//use this code for 30 day intervals
add_filter(\'cron_schedules\',\'add_thirty_day_cron\');//adds 30 day interval
function add_thirty_day_cron($schedules) {
  $schedules[\'thirtydays\'] = array( \'interval\' => 30 * DAY_IN_SECONDS, \'display\' => __( \'Every 30 days\') );
  return $schedules;
}
add_action(\'do_thirty_day_meta_sync\', \'my_meta_sync\');//hook for cron
add_action(\'wp_loaded\',\'add_my_thirty_day_sync_cron\');//schedules cron
function add_my_thirty_day_sync_cron() {
  if (!wp_next_scheduled(\'do_thirty_day_meta_sync\')) {
      $timestamp = date_create(\'first day of next month\')->format(\'U\');
      wp_schedule_event($timestamp, \'thirtydays\', \'do_thirty_day_meta_sync\');

  }
}
//end
要在每月的第一天运行同步,您需要安排每日cron。

function my_meta_sync() {
    $users = get_users();
    foreach ($users as $user) {
        $meta = get_user_meta( $user->ID );
        if ($meta[\'firstname\'][0] != $meta[\'billing_firstname\'][0]) update_user_meta( $user->ID, $meta[\'billing_firstname\'][0], $meta[\'firstname\'][0] );
    }
}
function my_monthly_meta_sync() {
    if (date(\'d\') == \'01\') my_meta_sync();
}
function add_daily_tasks() {
    if (!wp_next_scheduled(\'my_daily_cron\')) wp_schedule_event(time(), \'daily\', \'my_daily_cron\');
}
add_action(\'wp_loaded\',\'add_daily_tasks\');//schedules cron
function my_daily_tasks(){
    my_monthly_meta_sync();
}
add_action(\'my_daily_cron\',\'my_daily_tasks\');
//end
我创建了一个通用的日常cron任务,因为一旦您习惯了运行cron风格的任务,尤其是日常任务,您就会想做更多的事情。接下来,您所要做的就是在my_daily_tasks() 您不必创建更多的cron挂钩,只要它们独立于一天中的时间。

我还建议安装一个cron插件(我使用WP Crontrol)来查看cron作业中发生了什么。您还可以使用插件创建/删除cron,而不是使用wp_schedule_event() 就像我在硬代码中做的那样。

结束

相关推荐

Wordpress wp-cron not working

Cron未按预期工作。如果我安排帖子或事件管理器事件,如果在发布时间之后访问站点,则不会发布。如果我去http://somedomain.tld/wp-cron.php?doing_wp_cron 它为空,而调试设置为打开。它应该是空的还是应该显示一些错误(如果有)?错误日志为空。WP Crontrol插件显示cron作业。有没有提示下一步要检查什么?