Show newly added posts since last user login time/date in WordPress

Getting the posts after a specific login time can be done in 2 steps.

  • You need to store the last login time of the user.
  • Changing the query to pull the posts which are modified after the above login time.

The below function will store the last login time of the user.

// Associating a function to login hook
add_action ( 'wp_login', 'set_last_login' );

function set_last_login ( $login ) {
$user = get_userdatabylogin ( $login );

// Setting the last login of the user
update_usermeta ( $user->ID, 'last_login', date ( 'Y-m-d H:i:s' ) );
}

Then you need to collect the last login time of the logged in user and modify the query as below.

<?php
// Get current user object
$current_user = wp_get_current_user();

// Get the last login time of the user
$last_login_time = get_user_meta ( $current_user->ID, 'last_login', true );

// WP_Query with post modified time
$the_query = new WP_Query(
array(
'date_query' =>
array(
'column' => 'post_modified',
'after' => $last_login_time,
)
)
);
?>
<?php if ( $the_query->have_posts() ) : ?>

<?php // Start the Loop ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php // Show the output ?>
<?php endwhile; ?>

<?php elseif: ?>

<?php echo __( 'No posts available' ); ?>

<?php endif; ?>
<?php
// Restore original Post Data
wp_reset_postdata();
?>

The above code will also work for newly added posts since on adding a new post the post_modified time is set same as post_date time.

Leave a Comment

Your email address will not be published.

You may use these HTML tags and attributes: <a href=""> <abbr> <acronym> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Send a Message