获取当前用户自上次发帖以来的天数

时间:2013-11-12 作者:Mark

如何获取当前用户上次发布帖子的时间?例如:

It has been <?php echo $days_since_last_post; ?> days since your last post
我需要在我正在开发的插件的变量中使用该数字。

我正在寻找一个考虑性能的解决方案。

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

您可以使用的修改版本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 添加后的功能sofunctions.php 第一次打开仪表板需要几秒钟。。。此函数只运行一次,但如果在它完成工作后删除(或注释)它可能会更好。

SO网友:David Kryzaniak

听起来你在找get_most_recent_post_of_user() http://codex.wordpress.org/Function_Reference/get_most_recent_post_of_user

在主题的功能中。php

    days_since_last_post(){
        $recent = get_most_recent_post_of_user( get_current_user_id() );
        $start = strtotime($recent[\'post_date_gmt\']);
        return ceil(abs(time() - $start) / 86400);
    }
然后,使用:

It has been <?php echo days_since_last_post(); ?> days since your last post

结束