I have a resource on my WordPress page that I only want to show X times per day per logged in user. I'm using the twenty sixteen WordPress theme.
Currently, Guests / visitors / non logged in users are forced via redirects to authenticate to my site in order to access any content.
How do impose a http request limit / pageview limit on a per-logged-in-user per day or per hour basis? I don't want to do it by IP address, I want to do it by unique user.
Has anyone seen this done? The closet I've seen is : https://premium.wpmudev.org/forums/topic/technical-question-how-to-limit-the-number-of-page-views-for-a-specific-site-under-a-wpmu-instsall#post-384060 but is there a solution already for this? I've searched for throttle, page view, http , limit, restrict, expire, but nothing seems to be restricting content on a logged-in-user-per-day-basis.
Thank you
**UPDATE: I am overriding the default page.php file of twenty sixteen theme to implement basic page-view limiting for logged-in users. **
<?php
//First, check for get_current_user_id.
$current_user = wp_get_current_user(); if ( 0 == $current_user->ID ) { // Logged out } else { // Logged in.
//Then create a log of visits by adding information to a user's metadata with update_user_meta & get_user_meta.
$COUNT_VISITS_TOTAL_LIMIT = 20;
$countVisitsUsed = 0;
if (get_user_meta($current_user->ID, 'countVisitsUsed', true)) {
$countVisitsUsed = get_user_meta($current_user->ID,'countVisitsUsed',true);
update_user_meta($current_user->ID, 'countVisitsUsed', $countVisitsUsed+1); //increment
}else{
update_user_meta( $current_user->ID, 'countVisitsUsed', 1, false );
$countVisitsUsed = get_user_meta($current_user->ID,'countVisitsUsed',true);
}
if ($countVisitsUsed == null || $countVisitsUsed ==false || $countVisitsUsed < $COUNT_VISITS_TOTAL_LIMIT) { //allow page load
//start of page.php
/**
* The template for displaying pages
*
* This is the template that displays all pages by default.
* Please note that this is the WordPress construct of pages and that
* other "pages" on your WordPress site will use a different template.
*
* @package WordPress
* @subpackage Twenty_Sixteen
* @since Twenty Sixteen 1.0
*/
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
// Start the loop.
while ( have_posts() ) : the_post();
// Include the page content template.
get_template_part( 'template-parts/content', 'page' );
// If comments are open or we have at least one comment, load up the comment template.
if ( comments_open() || get_comments_number() ) {
comments_template();
}
// End of the loop.
endwhile;
?>
</main><!-- .site-main -->
<?php get_sidebar( 'content-bottom' ); ?>
</div><!-- .content-area -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>