The get_private_posts_cap_sql() WordPress PHP function retrieves the private post SQL based on capability.
Usage
get_private_posts_cap_sql($post_type);
Parameters
- $post_type (string|array) – Single post type or an array of post types. Currently only supports ‘post’ or ‘page’.
More information
See WordPress Developer Resources: get_private_posts_cap_sql()
Examples
Filter private posts for current user
This example filters the private posts for the current user with a custom query.
global $wpdb;
$user_id = get_current_user_id();
$post_type = 'post';
$cap_sql = get_private_posts_cap_sql($post_type);
$query = "SELECT * FROM $wpdb->posts WHERE post_type = %s AND {$cap_sql}";
$private_posts = $wpdb->get_results($wpdb->prepare($query, $post_type));
Custom function to retrieve private pages
Create a custom function to retrieve private pages for the current user.
function get_private_pages_for_current_user() {
global $wpdb;
$user_id = get_current_user_id();
$post_type = 'page';
$cap_sql = get_private_posts_cap_sql($post_type);
$query = "SELECT * FROM $wpdb->posts WHERE post_type = %s AND {$cap_sql}";
$private_pages = $wpdb->get_results($wpdb->prepare($query, $post_type));
return $private_pages;
}
List private posts and pages in a dropdown
This example lists private posts and pages in a dropdown for the current user.
function private_posts_pages_dropdown() {
$private_posts = get_private_pages_for_current_user();
echo '<select>';
foreach ($private_posts as $private_post) {
echo '<option value="' . $private_post->ID . '">' . $private_post->post_title . '</option>';
}
echo '</select>';
}
Get private post count for current user
This example retrieves the private post count for the current user.
function get_private_post_count() {
global $wpdb;
$user_id = get_current_user_id();
$post_type = 'post';
$cap_sql = get_private_posts_cap_sql($post_type);
$query = "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = %s AND {$cap_sql}";
$private_post_count = $wpdb->get_var($wpdb->prepare($query, $post_type));
return $private_post_count;
}
Get private posts for multiple post types
Retrieve private posts for multiple post types (e.g., ‘post’ and ‘page’) for the current user.
function get_private_posts_for_multiple_post_types() {
global $wpdb;
$user_id = get_current_user_id();
$post_types = ['post', 'page'];
$private_posts = [];
foreach ($post_types as $post_type) {
$cap_sql = get_private_posts_cap_sql($post_type);
$query = "SELECT * FROM $wpdb->posts WHERE post_type = %s AND {$cap_sql}";
$private_posts = array_merge($private_posts, $wpdb->get_results($wpdb->prepare($query, $post_type)));
}
return $private_posts;
}