Planning the content restriction framework next sprint to handle mixed queries.
I’ve decided to base the restriction system on taxonomies to leverage the hierarchical nature of those and the way those are supported in the WordPress query system.
The framework allows for some post types, not all, to be restricted and to define what restriction should be used to restrict which post type; the problem arises when one single query
- queries for restricted and unrestricted post types
- queries for post types that are restricted using different taxonomies
To make an example given the
notice post types, given the
post page is restricted with the
user_role taxonomy and the
notice post type is restricted with the
user_country taxonomy then two possible “edge cases” would be
$posts = (new WP_Query('post_type' => ['post', 'page']))->get_posts();
$posts = (new WP_Query('post_type' => ['post', 'notice']))->get_posts();
The solution to handle both cases I’ve found is hooking into the
pre_get_posts filter to manipulate the
post__not_in query var.
In terms of queries the solution comes with a cost paid in sub-queries that I’m willing to test
if querying for restricted post types or querying for a mix of restricted and unrestricted post types for each restricted post type in the queried post types get the inaccessible IDs for the post type using a tax query using the taxonomies restricting the post type set the post__not_in query var on the query to prevent inaccessible posts from being returned in the query else if querying for restricted post types only and if all of the post types are restricted using the same taxonomies add a taxonomy query to the query let the query run
I will start reworking the code to accommodate for this solution and see what will come out.