Using WordPress ‘post_password_required’ PHP filter

The post_password_required WordPress PHP filter determines if a post requires the user to provide a password.

Usage

add_filter('post_password_required', 'your_custom_function', 10, 2);

function your_custom_function($required, $post) {
  // your custom code here
  return $required;
}

Parameters

  • $required (bool) – Whether the user needs to supply a password. True if the password has not been provided or is incorrect, false if the password has been supplied or is not required.
  • $post (WP_Post) – Post object.

More information

See WordPress Developer Resources: post_password_required

Examples

Make all posts password protected

Force password protection for all posts, regardless of their current settings.

add_filter('post_password_required', 'all_posts_password_protected', 10, 2);

function all_posts_password_protected($required, $post) {
  return true;
}

Disable password protection for a specific post

Remove password protection for a specific post by its ID.

add_filter('post_password_required', 'disable_password_protection_for_post', 10, 2);

function disable_password_protection_for_post($required, $post) {
  if ($post->ID == 123) {
    return false;
  }
  return $required;
}

Enable password protection only for logged-in users

Allow only logged-in users to access password-protected posts.

add_filter('post_password_required', 'password_protection_for_logged_in_users', 10, 2);

function password_protection_for_logged_in_users($required, $post) {
  if (is_user_logged_in()) {
    return false;
  }
  return $required;
}

Require password for specific categories

Require a password for posts in specific categories.

add_filter('post_password_required', 'password_required_for_categories', 10, 2);

function password_required_for_categories($required, $post) {
  $protected_categories = array('premium', 'exclusive');
  $post_categories = wp_get_post_categories($post->ID);

  foreach ($post_categories as $category) {
    if (in_array($category->slug, $protected_categories)) {
      return true;
    }
  }
  return $required;
}

Set a default password for all password-protected posts

Override the post-specific passwords and set a global password for all protected posts.

add_filter('post_password_required', 'default_password_for_protected_posts', 10, 2);

function default_password_for_protected_posts($required, $post) {
  $default_password = 'global_password';

  if ($required && isset($_COOKIE['wp-postpass_' . COOKIEHASH]) && $_COOKIE['wp-postpass_' . COOKIEHASH] === $default_password) {
    return false;
  }
  return $required;
}