Intereting Posts
Как я могу создать «выдержку» с текстом, который не будет отображаться в самом сообщении? Удалить конечную косую черту Несколько блогов, разные имена доменов, одна установка, чтобы управлять ими всеми Где находится запрос в wp-login.php WP-PageNavi не работает на шаблоне пользовательской страницы Разрешение администратора для создания блогов в многопользовательском режиме Как написать простые вычисления с помощью пользовательских полей в цикле? Как удалить контейнер div в пользовательском меню? лучший способ остановить этот дубликат WordPress Форма представления на лицевой стороне не прикрепляет пользовательский тип сообщения get_posts () и Wp_Query работает не так, как ожидалось, с мета-запросом WordPress FTP через панель администратора медленно SQL Query для получения всех сообщений в их последнем обновленном состоянии Что бы восстановить и оптимизировать базу данных WordPress? Очистить URL-адреса для настраиваемых переменных $ _GET

Получить количество дней с последнего поста текущего пользователя

Как я могу получить, как долго с последнего опубликованного сообщения текущего пользователя? Например:

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

Мне нужно использовать это число в переменной для плагина, который я разрабатываю.

Я ищу решение с учетом производительности.

Вы можете использовать измененную версию этого ответа by @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() ); } 

Таким образом, вы сохраняете в пользовательской метке временную метку последнего редактирования.

Теперь вы можете написать функцию для возврата дней с момента последнего редактирования

 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'); 

Эта функция запускается только один раз, когда вы переходите на бэкэнд (во избежание замедления работы интерфейса). Это очень медленная функция, поэтому после добавления в functions.php первый раз, когда вы открываете свою панель управления, это займет несколько секунд … Эта функция запускается один раз, но, вероятно, лучше, если вы удалите (или прокомментируете) ее после того, как она выполнила свою работу ,

Похоже, вы ищете get_most_recent_post_of_user() http://codex.wordpress.org/Function_Reference/get_most_recent_post_of_user

В функции function.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