如果要删除原始插件的功能,请尝试将其添加到主题的功能中。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()
就像我在硬代码中做的那样。