How to Restrict Content to Registered WordPress Users

In recent times, most online news and information publication websites have adopted the freemium model whereby readers who aren’t a registered member are limited to certain number of articles they can read; paying, registered users on the other hand, have unlimited access to articles.

In this article, we will be showing you how to build a simple plugin that gives the administrator of a WordPress-powered site the ability to restrict certain posts, pages and part of a post content to registered users only.

Beginner’s Guide to WordPress Plugin Development

Beginner’s Guide to WordPress Plugin Development

The WordPress CMS has changed the face of our Internet and allowed a surge of new ideas to... Read more

Coding the Plugin

When writing a WordPress plugin, the header (a PHP comment block) section contains information such as name, description, author and author URL of the plugin. Here is the plugin header:

<?php
 /*
 Plugin Name: Restrict Content to registered users
 Plugin URI: http://hongkiat.com
 Description: Restricting content to registered users only
 Version: 0.1
 Author: Agbonghama Collins
 Author URI: http://tech4sky.com
 */
 

The plugin will have a settings page consisting of a form field which will contain the post or page IDs to be restricted.

The code below will add a sub-menu to the Settings titled Restrict content To Registered User.

add_action('admin_menu', 'rcru_plugin_menu');
 // Adding Submenu to settings
 function rcru_plugin_menu() {
 add_options_page(
 'Restrict content To Registered User',
 'Restrict content To Registered User',
 'manage_options',
 'rcru-restrict-content-user',
 'rcru_content_user_settings'
 );
 }

The fifth argument rcru_content_user_settings passed to add_options_page above is the function that will output the content for the plugin settings.

 function rcru_content_user_settings() {
 echo '<div class="wrap">';
 screen_icon();
 echo '<h2>Restrict content To Registered User</h2>';
 echo '<form action="options.php" method="post">';
 do_settings_sections('rcru-restrict-content-user');
 settings_fields('rcru_settings_group');
 submit_button();
 }
 

The form lacks the <input> field and it isn’t capable just yet to save data to the database because we have yet to implement the WordPress settings API.

The function plugin_option defines the settings section and field.

 // plugin field and sections
 function plugin_option() {
 add_settings_section(
 'rcru_settings_section',
 'Plugin Options',
 null,
 'rcru-restrict-content-user
 ');
 
 add_settings_field(
 'post-page-id',
 '<label for="post-page-id">Post and page ID to be restricted.</label>',
 'post_page_field',
 'rcru-restrict-content-user',
 'rcru_settings_section'
 );
 
 // register settings
 register_setting('rcru_settings_group', 'rcru_post-id-option');
 

Mind you, the third argument post_page_field passed to the add_settings_field function above is called to echo the form <input> field.

function post_page_field() {
 echo "Enter Post or Page ID separated by comma. ";
 echo '<input style="width: 300px; height:80px" type="text" id="post-page-id" name="rcru_post-id-option" value="' . get_option('rcru_post-id-option') . '">';
 
 }
 

The function plugin_option is finally hooked to the admin_init action to put it into action.

 add_action('admin_init', 'plugin_option');
 

We are done with building the plugin settings page but what use is the data saved by the settings page to the database if it isn’t going to be used?

Next is the coding of the function restrict_content_register_user that will retrieve the post or page ID to be restricted to only registered users (which was saved to the database in the plugin settings page). This ensures the current user viewing the post is registered; otherwise an error message telling the user to register would be displayed.

Finally, the function will be hooked to the_content filter so as to affect the change in the post or page.

function restrict_content_register_user($content) {
 global $post;
 $post_database = get_option('rcru_post-id-option');
 $post_database = explode(',', $post_database);
 $current_user = wp_get_current_user();
 
 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old If there is no content, return. */
 if (is_null($content))
 return $content;
 
 foreach ($post_database as $posts) {
 $posts = trim($posts);
 if ($posts == $post -> ID) {
 if (username_exists($current_user -> user_login)) {
 
 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old Return the private content. */
 return $content;
 } else {
 
 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old Return an alternate message. */
 return '<div align="center" style="color: #fff; padding: 20px; border: 1px solid border-color: rgb(221, 204, 119); background-color: #3B5998">
 You must be a registered user to read this content.
 <br/>
 <a style="font-size: 20px;" href="' . get_site_url() . '/wp-login.php?action=register">Register Here</a>
 </div>';
 }
 
 }
 }
 return $content;
 }
 add_filter('the_content', 'restrict_content_register_user');
 

We are now done with the first way the plugin work: the use of the plugin settings page.

What’s left is to add the metabox and shortcode feature to the plugin.

Adding Metabox

To add a metabox containing a checkbox in post and page edit screens will allow restriction of that post or page to registered user when the checkbox is ticked. The function rcru_mb_create will include the meta box in all post and pages when hooked to the add_meta_boxes action.

 function rcru_mb_create() {
 /**
 10 Apple Watch Apps You Will Love.html 10 Free Multipurpose WordPress Themes.html 10 Interesting Talks Designers Must Watch.html 10 Little-Known Tips to Secure WordPress Sites.html 10 Tested SEO Hacks to Attract More Traffic to WordPress Website.html 10 Things Windows Phones Did Better Than Android Phones.html 10 Things You Should Know Before You Try Coding.html 10 Ways Technology Makes Marketing Look Easy.html 15 Clever Examples of Interactive Packaging Design.html 20 New Tech Words You Should Know.html 20 Websites with Unorthodox Geometry Elements for Your Inspiration.html 30 Commonly Misused Words on the Internet.html 30 Sci-Fi-riffic Fonts to Download For Free.html 40+ Free Icon Sets You Should Have in Your Bookmarks.html 4 Creative Photoshop Artists Who Cleverly Manipulate Landscapes [PHOTOS].html 50+ Beautiful & Captivating Bokeh Photos - Volume 2.html 5 Android Apps for Less Boring Lock Screens.html 5 End-of-Year Tax Tips for Freelancers.html 5 Practices to Keep Your DIY WordPress Website Fast and Secure.html 5 Remote Worker Myths You Need To Stop Believing.html 5 Rugged Smartphone Cases to Survive (Almost) Any Drop.html 5 Simple Ways to Boost Your Online Sales Revenue.html 5 Smart Ways to Get Your Clients to Pay Your Rates.html 5 Social Commerce Trends for 2021 (From Facebook Shops to Shoppable Video).html 5 Things You Should Know About Mobile Advertising.html 5 Types of Social Media Followers & How to Engage Them.html 5 Web Hosting Technology Trends in 2021.html 60 Beautiful Flowers Wallpapers to Download.html 7 Content Curation Tools For Bloggers.html 9 Indie Marketplaces to Sell Your Designs.html 9 Lessons I Learned From Building My First App.html A Guide to Choose Fonts for Your Web Design.html Basic Guidelines to Product Sketching.html Brand Identity Lessons You Can Learn from Marvel Studios.html Calculating Percentage Margins in CSS.html Can't Find the Best 3D Modeling Software? Here Are Some Relatively Better Ones.html Changing The Face Of Web Design: A Case Study of 25 Years.html Creatives: Why You Should Always Have a Side Project.html Demo Day: 5 Tips To Prevent Bugs And Blunders.html get-posts-html.sh get-posts-url.sh Guide to Calculating Breakeven Point for Freelancers.html Hackers Love Your Social Media Shares. Here's Why..html Happiness Can Be The Best Strategy For Increasing Productivity: Here's How.html How 10 Global Startups are Solving World Problems.html How Big Data Analytics Make Cities Smarter.html How Can AI Chatbots Improve Customer Experience?.html How Inspirational Logos Can Affect Your Bottom Line.html How Open Source Companies Stay Profitable.html How to Create a Glossy Christmas Bauble in Illustrator.html How to Create Flaming Text Effect with Adobe Photoshop.html How to Design Websites with Great Navigation.html How to Get New Clients to Pursue You.html How To Get Your Readers To Market Your Content.html How to Harness Your Inner Creativity For Freelancers.html How to Install Windows Boot Camp Without An Optical Drive.html How to Optimize Conversion Rate with Persuasive Web Design.html How to Promote Your YouTube Channel at Zero Budget.html How to Restrict Content To Registered Users [WP Plugin Tutorial].html input-posts-id.txt Man to Machine: How to Reboot Your Humanity.html _old On the Future of Web Development: Are Designers at the Helm? [Op-Ed].html output-posts-urls.txt Remote Working: How to Stay Effective Without Becoming a Mowgli.html Shopify vs WordPress - Which is Best for e-commerce in 2021?.html Showcase of 10  Talented Freelance Designers (And Their Portfolios).html Testing Web Navigation with Card Sorting & Tree Testing.html The 12-Step Program to Personal Productivity.html Top Collaboration Apps For Project Managers.html What Small Business Owners Need to Know About UX Design?.html What to Do When Good Hosts Go Bad.html Why Designing Without A Design Brief Is Like Playing Charades.html Why Grandmas Will Be Able to Build an App by 2020.html Why I Switch From Windows to macOS.html @array $screens Write screen on which to show the meta box
 10 Apple Watch Apps You Will Love.html 10 Free Multipurpose WordPress Themes.html 10 Interesting Talks Designers Must Watch.html 10 Little-Known Tips to Secure WordPress Sites.html 10 Tested SEO Hacks to Attract More Traffic to WordPress Website.html 10 Things Windows Phones Did Better Than Android Phones.html 10 Things You Should Know Before You Try Coding.html 10 Ways Technology Makes Marketing Look Easy.html 15 Clever Examples of Interactive Packaging Design.html 20 New Tech Words You Should Know.html 20 Websites with Unorthodox Geometry Elements for Your Inspiration.html 30 Commonly Misused Words on the Internet.html 30 Sci-Fi-riffic Fonts to Download For Free.html 40+ Free Icon Sets You Should Have in Your Bookmarks.html 4 Creative Photoshop Artists Who Cleverly Manipulate Landscapes [PHOTOS].html 50+ Beautiful & Captivating Bokeh Photos - Volume 2.html 5 Android Apps for Less Boring Lock Screens.html 5 End-of-Year Tax Tips for Freelancers.html 5 Practices to Keep Your DIY WordPress Website Fast and Secure.html 5 Remote Worker Myths You Need To Stop Believing.html 5 Rugged Smartphone Cases to Survive (Almost) Any Drop.html 5 Simple Ways to Boost Your Online Sales Revenue.html 5 Smart Ways to Get Your Clients to Pay Your Rates.html 5 Social Commerce Trends for 2021 (From Facebook Shops to Shoppable Video).html 5 Things You Should Know About Mobile Advertising.html 5 Types of Social Media Followers & How to Engage Them.html 5 Web Hosting Technology Trends in 2021.html 60 Beautiful Flowers Wallpapers to Download.html 7 Content Curation Tools For Bloggers.html 9 Indie Marketplaces to Sell Your Designs.html 9 Lessons I Learned From Building My First App.html A Guide to Choose Fonts for Your Web Design.html Basic Guidelines to Product Sketching.html Brand Identity Lessons You Can Learn from Marvel Studios.html Calculating Percentage Margins in CSS.html Can't Find the Best 3D Modeling Software? Here Are Some Relatively Better Ones.html Changing The Face Of Web Design: A Case Study of 25 Years.html Creatives: Why You Should Always Have a Side Project.html Demo Day: 5 Tips To Prevent Bugs And Blunders.html get-posts-html.sh get-posts-url.sh Guide to Calculating Breakeven Point for Freelancers.html Hackers Love Your Social Media Shares. Here's Why..html Happiness Can Be The Best Strategy For Increasing Productivity: Here's How.html How 10 Global Startups are Solving World Problems.html How Big Data Analytics Make Cities Smarter.html How Can AI Chatbots Improve Customer Experience?.html How Inspirational Logos Can Affect Your Bottom Line.html How Open Source Companies Stay Profitable.html How to Create a Glossy Christmas Bauble in Illustrator.html How to Create Flaming Text Effect with Adobe Photoshop.html How to Design Websites with Great Navigation.html How to Get New Clients to Pursue You.html How To Get Your Readers To Market Your Content.html How to Harness Your Inner Creativity For Freelancers.html How to Install Windows Boot Camp Without An Optical Drive.html How to Optimize Conversion Rate with Persuasive Web Design.html How to Promote Your YouTube Channel at Zero Budget.html How to Restrict Content To Registered Users [WP Plugin Tutorial].html input-posts-id.txt Man to Machine: How to Reboot Your Humanity.html _old On the Future of Web Development: Are Designers at the Helm? [Op-Ed].html output-posts-urls.txt Remote Working: How to Stay Effective Without Becoming a Mowgli.html Shopify vs WordPress - Which is Best for e-commerce in 2021?.html Showcase of 10  Talented Freelance Designers (And Their Portfolios).html Testing Web Navigation with Card Sorting & Tree Testing.html The 12-Step Program to Personal Productivity.html Top Collaboration Apps For Project Managers.html What Small Business Owners Need to Know About UX Design?.html What to Do When Good Hosts Go Bad.html Why Designing Without A Design Brief Is Like Playing Charades.html Why Grandmas Will Be Able to Build an App by 2020.html Why I Switch From Windows to macOS.html @values post, page, dashboard, link, attachment, custom_post_type
 */
 $screens = array(
 'post',
 'page'
 );
 foreach ($screens as $screen) {
 add_meta_box('rcru-meta',
 'Restrict Post / Page',
 'rcru_mb_function',
 $screen,
 'normal',
 'high');
 }
 }
 add_action('add_meta_boxes', 'rcru_mb_create');
 

The function rcru_mb_function contains the checkbox and description of the metabox.

 function rcru_mb_function($post) {
 
 //retrieve the metadata values if they exist
 $restrict_post = get_post_meta($post -> ID, '_rcru_restrict_content', true);
 
 // Add an nonce field so we can check for it later when validating
 wp_nonce_field('rcru_inner_custom_box', 'rcru_inner_custom_box_nonce');
 
 echo '<div style="margin: 10px 100px; text-align: center">
 <table>
 <tr>
 <th scope="row"><label for="rcru-restrict-content">Restrict content?</label></th>
 <td>
 <input type="checkbox" value="1" name="rcru_restrict_content" id="rcru-restrict-content"' . checked($restrict_post, 1, false) . '>
 <span class="description">Checking this setting will restrict this post to only registered users.</span>
 </td>
 </tr>
 </table>
 </div>';
 }
 

The rcru_mb_save_data function handles the security check and the saving of the form values to the database.

 function rcru_mb_save_data($post_id) {
 /*
 10 Apple Watch Apps You Will Love.html 10 Free Multipurpose WordPress Themes.html 10 Interesting Talks Designers Must Watch.html 10 Little-Known Tips to Secure WordPress Sites.html 10 Tested SEO Hacks to Attract More Traffic to WordPress Website.html 10 Things Windows Phones Did Better Than Android Phones.html 10 Things You Should Know Before You Try Coding.html 10 Ways Technology Makes Marketing Look Easy.html 15 Clever Examples of Interactive Packaging Design.html 20 New Tech Words You Should Know.html 20 Websites with Unorthodox Geometry Elements for Your Inspiration.html 30 Commonly Misused Words on the Internet.html 30 Sci-Fi-riffic Fonts to Download For Free.html 40+ Free Icon Sets You Should Have in Your Bookmarks.html 4 Creative Photoshop Artists Who Cleverly Manipulate Landscapes [PHOTOS].html 50+ Beautiful & Captivating Bokeh Photos - Volume 2.html 5 Android Apps for Less Boring Lock Screens.html 5 End-of-Year Tax Tips for Freelancers.html 5 Practices to Keep Your DIY WordPress Website Fast and Secure.html 5 Remote Worker Myths You Need To Stop Believing.html 5 Rugged Smartphone Cases to Survive (Almost) Any Drop.html 5 Simple Ways to Boost Your Online Sales Revenue.html 5 Smart Ways to Get Your Clients to Pay Your Rates.html 5 Social Commerce Trends for 2021 (From Facebook Shops to Shoppable Video).html 5 Things You Should Know About Mobile Advertising.html 5 Types of Social Media Followers & How to Engage Them.html 5 Web Hosting Technology Trends in 2021.html 60 Beautiful Flowers Wallpapers to Download.html 7 Content Curation Tools For Bloggers.html 9 Indie Marketplaces to Sell Your Designs.html 9 Lessons I Learned From Building My First App.html A Guide to Choose Fonts for Your Web Design.html Basic Guidelines to Product Sketching.html Brand Identity Lessons You Can Learn from Marvel Studios.html Calculating Percentage Margins in CSS.html Can't Find the Best 3D Modeling Software? Here Are Some Relatively Better Ones.html Changing The Face Of Web Design: A Case Study of 25 Years.html Creatives: Why You Should Always Have a Side Project.html Demo Day: 5 Tips To Prevent Bugs And Blunders.html get-posts-html.sh get-posts-url.sh Guide to Calculating Breakeven Point for Freelancers.html Hackers Love Your Social Media Shares. Here's Why..html Happiness Can Be The Best Strategy For Increasing Productivity: Here's How.html How 10 Global Startups are Solving World Problems.html How Big Data Analytics Make Cities Smarter.html How Can AI Chatbots Improve Customer Experience?.html How Inspirational Logos Can Affect Your Bottom Line.html How Open Source Companies Stay Profitable.html How to Create a Glossy Christmas Bauble in Illustrator.html How to Create Flaming Text Effect with Adobe Photoshop.html How to Design Websites with Great Navigation.html How to Get New Clients to Pursue You.html How To Get Your Readers To Market Your Content.html How to Harness Your Inner Creativity For Freelancers.html How to Install Windows Boot Camp Without An Optical Drive.html How to Optimize Conversion Rate with Persuasive Web Design.html How to Promote Your YouTube Channel at Zero Budget.html How to Restrict Content To Registered Users [WP Plugin Tutorial].html input-posts-id.txt Man to Machine: How to Reboot Your Humanity.html _old On the Future of Web Development: Are Designers at the Helm? [Op-Ed].html output-posts-urls.txt Remote Working: How to Stay Effective Without Becoming a Mowgli.html Shopify vs WordPress - Which is Best for e-commerce in 2021?.html Showcase of 10  Talented Freelance Designers (And Their Portfolios).html Testing Web Navigation with Card Sorting & Tree Testing.html The 12-Step Program to Personal Productivity.html Top Collaboration Apps For Project Managers.html What Small Business Owners Need to Know About UX Design?.html What to Do When Good Hosts Go Bad.html Why Designing Without A Design Brief Is Like Playing Charades.html Why Grandmas Will Be Able to Build an App by 2020.html Why I Switch From Windows to macOS.html We need to verify this came from the our screen and with proper authorization,
 10 Apple Watch Apps You Will Love.html 10 Free Multipurpose WordPress Themes.html 10 Interesting Talks Designers Must Watch.html 10 Little-Known Tips to Secure WordPress Sites.html 10 Tested SEO Hacks to Attract More Traffic to WordPress Website.html 10 Things Windows Phones Did Better Than Android Phones.html 10 Things You Should Know Before You Try Coding.html 10 Ways Technology Makes Marketing Look Easy.html 15 Clever Examples of Interactive Packaging Design.html 20 New Tech Words You Should Know.html 20 Websites with Unorthodox Geometry Elements for Your Inspiration.html 30 Commonly Misused Words on the Internet.html 30 Sci-Fi-riffic Fonts to Download For Free.html 40+ Free Icon Sets You Should Have in Your Bookmarks.html 4 Creative Photoshop Artists Who Cleverly Manipulate Landscapes [PHOTOS].html 50+ Beautiful & Captivating Bokeh Photos - Volume 2.html 5 Android Apps for Less Boring Lock Screens.html 5 End-of-Year Tax Tips for Freelancers.html 5 Practices to Keep Your DIY WordPress Website Fast and Secure.html 5 Remote Worker Myths You Need To Stop Believing.html 5 Rugged Smartphone Cases to Survive (Almost) Any Drop.html 5 Simple Ways to Boost Your Online Sales Revenue.html 5 Smart Ways to Get Your Clients to Pay Your Rates.html 5 Social Commerce Trends for 2021 (From Facebook Shops to Shoppable Video).html 5 Things You Should Know About Mobile Advertising.html 5 Types of Social Media Followers & How to Engage Them.html 5 Web Hosting Technology Trends in 2021.html 60 Beautiful Flowers Wallpapers to Download.html 7 Content Curation Tools For Bloggers.html 9 Indie Marketplaces to Sell Your Designs.html 9 Lessons I Learned From Building My First App.html A Guide to Choose Fonts for Your Web Design.html Basic Guidelines to Product Sketching.html Brand Identity Lessons You Can Learn from Marvel Studios.html Calculating Percentage Margins in CSS.html Can't Find the Best 3D Modeling Software? Here Are Some Relatively Better Ones.html Changing The Face Of Web Design: A Case Study of 25 Years.html Creatives: Why You Should Always Have a Side Project.html Demo Day: 5 Tips To Prevent Bugs And Blunders.html get-posts-html.sh get-posts-url.sh Guide to Calculating Breakeven Point for Freelancers.html Hackers Love Your Social Media Shares. Here's Why..html Happiness Can Be The Best Strategy For Increasing Productivity: Here's How.html How 10 Global Startups are Solving World Problems.html How Big Data Analytics Make Cities Smarter.html How Can AI Chatbots Improve Customer Experience?.html How Inspirational Logos Can Affect Your Bottom Line.html How Open Source Companies Stay Profitable.html How to Create a Glossy Christmas Bauble in Illustrator.html How to Create Flaming Text Effect with Adobe Photoshop.html How to Design Websites with Great Navigation.html How to Get New Clients to Pursue You.html How To Get Your Readers To Market Your Content.html How to Harness Your Inner Creativity For Freelancers.html How to Install Windows Boot Camp Without An Optical Drive.html How to Optimize Conversion Rate with Persuasive Web Design.html How to Promote Your YouTube Channel at Zero Budget.html How to Restrict Content To Registered Users [WP Plugin Tutorial].html input-posts-id.txt Man to Machine: How to Reboot Your Humanity.html _old On the Future of Web Development: Are Designers at the Helm? [Op-Ed].html output-posts-urls.txt Remote Working: How to Stay Effective Without Becoming a Mowgli.html Shopify vs WordPress - Which is Best for e-commerce in 2021?.html Showcase of 10  Talented Freelance Designers (And Their Portfolios).html Testing Web Navigation with Card Sorting & Tree Testing.html The 12-Step Program to Personal Productivity.html Top Collaboration Apps For Project Managers.html What Small Business Owners Need to Know About UX Design?.html What to Do When Good Hosts Go Bad.html Why Designing Without A Design Brief Is Like Playing Charades.html Why Grandmas Will Be Able to Build an App by 2020.html Why I Switch From Windows to macOS.html because save_post can be triggered at other times.
 */
 
 // Check if our nonce is set.
 if (!isset($_POST['rcru_inner_custom_box_nonce']))
 return $post_id;
 
 $nonce = $_POST['rcru_inner_custom_box_nonce'];
 
 // Verify that the nonce is valid.
 if (!wp_verify_nonce($nonce, 'rcru_inner_custom_box'))
 return $post_id;
 
 // If this is an autosave, our form has not been submitted, so we don't want to do anything.
 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
 return $post_id;
 
 // Check the user's permissions.
 if ('page' == $_POST['post_type']) {
 
 if (!current_user_can('edit_page', $post_id))
 return $post_id;
 } else {
 
 if (!current_user_can('edit_post', $post_id))
 return $post_id;
 }
 
 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old OK, its safe for us to save the data now. */
 
 // If old entries exist, retrieve them
 $old_restrict_post = get_post_meta($post_id, '_rcru_restrict_content', true);
 
 // Sanitize user input.
 $restrict_post = sanitize_text_field($_POST['rcru_restrict_content']);
 
 // Update the meta field in the database.
 update_post_meta($post_id, '_rcru_restrict_content', $restrict_post, $old_restrict_post);
 
 }
 
 //hook to save the meta box data
 add_action('save_post', 'rcru_mb_save_data');
 

The function restrict_content_metabox will examine a given post or page to see if it has restrictions, check if the user reading the post is registered and display a notice telling the user to register.

 function restrict_content_metabox($content) {
 global $post;
 //retrieve the metadata values if they exist
 $post_restricted = get_post_meta($post -> ID, '_rcru_restrict_content', true);
 
 // if the post or page has restriction and the user isn't registered
 // display the error notice
 if ($post_restricted == 1 && (!username_exists(wp_get_current_user()->user_login)) ) {
 
 return '<div align="center" style="color: #fff; padding: 20px; border: 1px solid #ddd; background-color: #3B5998">
 You must be a registered user to read this content.
 <br/>
 <a style="font-size: 20px;" href="' . get_site_url() . '/wp-login.php?action=register">Register Here</a>
 </div>';
 }
 
 return $content;
 
 }
 
 // hook the function to the post content to effect the change
 add_filter('the_content', 'restrict_content_metabox');
 

Adding the Shortcode

With the shortcode, part of a post can be restricted to only registered users.

The function rcru_user_shortcodes contains the shortcode hook function add_shortcode that defines the shortcode tag [rcru-private]. The second argument passed to add_shortcode is the callback function that is called when the shortcode is in use.

 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old Function for registering the shortcode. */
 function rcru_user_shortcodes() {
 
 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old Adds the [rcru-private] shortcode. */
 add_shortcode('rcru-private', 'rcru_shortcode');
 }
 

The function is then registered to init action so it will be recognised by WordPress internals.

 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old Register shortcodes in 'init'. */
 add_action('init', 'rcru_user_shortcodes');
 

Finally, the rcru_shortcode callback function handles the shortcode output.

 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old Function for handling shortcode output. */
 function rcru_shortcode($attr, $content = '') {
 
 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old Check if the current user has the 'read_private_content' capability. */
 $current_reader = wp_get_current_user();
 if (!username_exists($current_reader -> user_login)) {
 
 /bin /boot /dev /etc /home /initrd.img /initrd.img.old /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var /vmlinuz /vmlinuz.old Return an alternate message. */
 return '<div align="center" style="color: #fff; padding: 20px; border: 1px solid border-color: rgb(221, 204, 119); background-color: #3B5998">
 You must be a registered user to read this content.
 <br/>
 <a style="font-size: 20px;" href="' . get_site_url() . '/wp-login.php?action=register">Register Here</a>
 </div>';
 }
 }
 

How the plugin works

The plugin will have a settings page with a form field that accept Post & Page IDs to be restricted, delimited by a comma.

To restrict a given post or page, enter their respective IDs, separated by a comma (,) in the form field. To get the ID of a post, go to the post edit screen (TinyMCE editor for writing post content), and look at the URL of the page. The number appended to ?post= is the post ID.

For instance, for http://wordpress.dev/wp-admin/post.php?post=88&action=edit, the number 88 is the post or page ID.

Metabox in post & Page edit screen

A post or page can also be restricted to registered users by ticking the Restrict content checkbox located at the metabox (added by the plugin to the post edit screen).

Shortcode

Part or the section of a post or page content can be hidden from public view and displayed only to registered members with the use of a plugin shortcode like this:

[rcru-private]Part of post or page content to be restricted to only registered users.[/rcru-private]
 

Lastly, here is a link to the plugin file. Feel free to explore the code and happy coding!

WebsiteFacebookTwitterInstagramPinterestLinkedInGoogle+YoutubeRedditDribbbleBehanceGithubCodePenWhatsappEmail