I am looking to implement a not-profit membership site where I need a following:

  • Only registered users can view content
  • If they try to view any content they need to login first with their own personal username and password.
  • When they logged in they can view all the posts.
  • Each post is going to have a pdf and when they click their link a request would be generated and it should be approved by a site admin first. Then they would get a link in an email.

I found some membership plugins but they are all expensive and I do not need all their feature like payment processors. I am wondering if it is possible to implement this site in Wordpress only?

  • Don't know if this warrants a full question/answer. You can password protect content and share the password with users (probably not robust enough) or you can redirect users to the login screen if they aren't already logged in, or you can only do that for certain sections of the site. While you may not need the features that membership plugins are offering, there's no rule that says you have to use all their features. If you've got more details with regards to your desired implementation please share. – Tony Djukic Feb 27 '20 at 1:35
  • @TonyDjukic I tried to refine my question. Password protecting the whole site and sharing that master password is not going to work for me because then they can share it. – gyurisc Feb 27 '20 at 6:08

When you publish a post or page on Wordpress you can set the status to Private. This means that this content is only viewable to registered and logged in users.

You can then restrict files to the person who uploaded them (or disable upload for non-admin). Here is an example of how to do that.

You could add a PDF to each post using the Media Library and then add a link to each post that sends an email to an administrator to approve sending the PDF.

With a little thought anything is possible.

The following code will force post status to private:

// Update Post Status to Private 
function force_type_private($post) {
  if ($post['post_status'] != 'trash' && $post['post_status'] != "draft" && $post['post_status'] != "auto-draft") {
    $post['post_status'] = 'private';
  return $post;
add_filter('wp_insert_post_data', 'force_type_private');

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.