编者注:推特ID和谷歌分析仅作为示例,可交换
TL;DR
我想每天在用户配置文件中保存一次或两次外部数据。我在我的用户配置文件中添加了两个自定义字段:
Twitter\\u ID(我从仪表板手动输入)
test1(通过php函数获得的外部数据)我希望能够执行以下操作:在
test1
对于每个用户配置文件,我从
Twitter_ID
.
主要目标:我正在制作一个面板,该面板将显示我的用户网站(外部网站)的统计数据。为此,我使用谷歌分析API。我将Google Analytics配置文件编号保存在自定义配置文件字段中。目前,每当我的用户希望看到他们(在前端)时,我都会运行脚本(统计信息)。生成它们需要几秒钟的时间。我的统计数据大约每天更改一次(不是每小时的统计数据,而是每天的统计数据)。因此,我们的想法是每天将统计数据保存一次到用户配置文件中。因此,就像这样,每次用户加载统计页面时都不需要花费时间来生成它们。
解决方案:所以,我开始考虑不同的解决方案。但最好的办法是保存数据,而不需要用户采取任何行动。或者,当有人访问该网站时,它会使用wp\\u cron每天为每个人保存一次数据。目前,我唯一成功的事情就是在用户更新其个人资料时保存数据。但这只会保存他的数据,不会为所有人保存,所以这不是我想要的。
EDIT
I tried this :
add_filter(\'cron_schedules\', \'new_interval\');
function new_interval($interval) {
$interval[\'minutes_1\'] = array(\'interval\' => 10*60, \'display\' => \'Once 1 minute\');
return $interval;
}
function InitiateMyCron() {
if (!wp_next_scheduled(\'MyCronAction\')) {
wp_schedule_event(time(), \'minutes_1\', \'MyCronAction\');
}
}
function MyCronAction( $user_id ) {
$twitter_id = $_POST[\'twitter_id\'];
$result = $twitter_id;
if ( !current_user_can( \'edit_user\', $user_id ) )
return false;
update_usermeta( $user_id, \'test1\', $result );
}
add_action( \'personal_options_update\', \'MyCronAction\' );
add_action( \'edit_user_profile_update\', \'MyCronAction\' );
但是,当我保存“Twitter\\u id”时,字段“test1”被更新。我不知道它是否每分钟都在更新
EDIT 2
if ( ! wp_next_scheduled( \'my_save_statistiques\' ) ) {
wp_schedule_event( strtotime(\'tomorrow\'), \'daily\', \'my_save_statistiques\' );
}
function my_save_statistiques( $user_id ) {
"blabla php" =
$ga->requestReportData($num_analytics,array(\'pagePath\'),array(\'visits\'), null, null, $fromDate, $toDate);
$visites_totales = $ga->getVisits();
if ( !current_user_can( \'edit_user\', $user_id ) )
return false;
update_usermeta( $user_id, \'visites_totales\', $visites_totales );
add_action( \'personal_options_update\', \'my_save_statistiques\' );
add_action( \'edit_user_profile_update\', \'my_save_statistiques\' );
}
EDIT 3
我最终以这个结尾,但它不起作用:(我将1周改为30秒,但名称仍然相同)
add_filter( \'cron_schedules\', \'myprefix_add_weekly_cron_schedule\' );
function myprefix_add_weekly_cron_schedule( $schedules ) {
$schedules[\'weekly\'] = array(
\'interval\' => 30, // 30 seconds
\'display\' => __( \'Once Weekly\' ),
);
return $schedules;
}
// Schedule an action if it\'s not already scheduled
if ( ! wp_next_scheduled( \'myprefix_my_cron_action\' ) ) {
wp_schedule_event( time(), \'weekly\', \'myprefix_my_cron_action\' );
}
// Hook into that action that\'ll fire weekly
add_action( \'myprefix_my_cron_action\', \'myprefix_function_to_run\' );
function myprefix_function_to_run() {
function my_save_statistiques( $user_id ) {
[...]
$visites_totales = $ga->getVisits();
if ( !current_user_can( \'edit_user\', $user_id ) )
return false;
update_usermeta( $user_id, \'visites_totales\', $visites_totales );
}
add_action( \'personal_options_update\', \'my_save_statistiques\' );
add_action( \'edit_user_profile_update\', \'my_save_statistiques\' );
}
Edit 4:
我发现
add_action( \'personal_options_update\', \'my_save_statistiques\' ); 是指用户更新自己的个人资料,但这不是我想要的。。。因为我想每天为所有用户保存一次数据。这就是为什么(我猜),我认为我以前的代码不起作用。
Edit 5:
FIRST STEP : 1/2 SUCCESS
用户每次访问网站时都会保存数据。主要目标是为每个人更新数据,但它可以这样工作。下一步:Cron
function my_save_statistiques( $user_id ) {
$visites_totales = [myscript];
if ( !current_user_can( \'edit_user\', $user_id ) )
return false;
update_usermeta( $user_id, \'visites_totales\', $visites_totales );
}
add_action( \'wp_head\', \'my_save_statistiques\' );
EDIT 6:
是否正确?
// Schedule an action if it\'s not already scheduled
if ( ! wp_next_scheduled( \'wp_head\' ) ) {
wp_schedule_event( time(), \'hourly\', \'wp_head\' );
}
// Hook into that action that\'ll fire weekly
function my_save_statistiques( $user_id ) {
$visites_totales = [myscript];
update_usermeta( $user_id, \'visites_totales\', $visites_totales );
}
add_action( \'wp_head\', \'my_save_statistiques\' );
I found a different solution
The solution :
保存已运行操作的时间,并检查与实际时间的差异:
function my_save_statistiques( $user_id ) {
$user_id = get_current_user_id();
$current_time = time();
if (empty($current_time)) {
update_usermeta( $user_id, \'last_analytics\', $current_time );
}
$last_analytics = get_user_meta( $user_id, \'last_analytics\', true );
$diff = $current_time - $last_analytics;
$one_day = 86400;
if ($diff > $one_day) {
$visites_totales = [myscript]
update_usermeta( $user_id, \'last_analytics\', $current_time );
update_usermeta( $user_id, \'visites_totales\', $visites_totales );
}
}
add_action( \'wp_head\', \'my_save_statistiques\' );