您可以使用的修改版本this 答复人@s_ha_dum.
在这里,您可以设置用户元而不是选项(即使元查询比选项查询慢)
add_action(\'save_post\', \'user_last_update\', 10, 2);
function user_last_update($id, $p) {
if (
(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
|| (defined(\'DOING_AJAX\') && DOING_AJAX)
|| ($p->post_status !== \'publish\')
) {
return;
}
update_user_meta( get_current_user_id(), \'last_update\', time() );
}
通过这种方式,您可以在user meta中保存上次编辑的时间戳。
现在,您可以编写一个函数来返回自上次编辑以来的天数
function user_last_edit(){
$id = get_current_user_id();
if ( ! $id ) return false;
$recent = get_user_meta( $id, \'last_update\', true );
return $recent ? round( abs( time() - $recent ) / DAY_IN_SECONDS ) : -1;
}
函数返回
false
如果没有记录用户,则返回
-1
如果用户从未发布过帖子。
执行的查询更简单,PHP所做的工作更少,结果也被缓存。
这只对发布新帖子的用户有效,因此所有用户都将以空白开头,但您可以编写只运行一次的函数来设置所有用户元。
function setup_last_edit() {
if ( get_transient(\'setup_last_edit_done\') ) return; // this function run once
$users = get_users( array(\'fields\'=> \'ID\') );
foreach ( $users as $userid ) {
$args = array(
\'author\' => $userid,
\'posts_per_page\' => 1,
\'orderby\' => \'date\',
\'order\' => \'DESC\'
);
$posts = get_posts($args);
if ( empty($posts) ) continue;
$p = array_pop($posts);
$last = mysql2date(\'U\', $p->post_modified );
update_user_meta( $userid, \'last_update\', $last );
}
set_transient(\'setup_last_edit_done\', 1);
}
add_action(\'admin_init\', \'setup_last_edit\');
当您在后端运行时,此函数只运行一次(以避免前端速度减慢)。这是一个
very slow 添加后的功能so
functions.php
第一次打开仪表板需要几秒钟。。。此函数只运行一次,但如果在它完成工作后删除(或注释)它可能会更好。