I have recently taken a look through the portfolio projects on my website. It is a nice walk down memory lane, but also a misrepresentation of what I do nowadays. It is also true about content I have created a long time ago, which is no longer up to date. It would be a pity to delete them, so I have come up with this solution to hide them by tagging.
The tag to use is hidden
. You can use your own tags, but be careful to follow the rules for defining a tag in the global posts query.
The code
The simplest way to get this going is to add the following code in your theme’s functions.php
file:
/**
* Hide posts which are tagged with 'hidden'
*/
function hide_posts_tagged_as_hidden ( $query ) {
// Apply this filter only for posts, if not in the admin area
if (
!is_admin() // must not be in the admin aread
&& (
$query->get('post_type') === 'post' || // queries posts
( is_archive() && single_cat_title("", false) !== 'hidden' ) // do nothing if trying to view the content of the tag
)
) {
// Define the new tax query
$new_tax_query = array(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => 'hidden',
'operator' => 'NOT IN',
);
// Append to the existing list
$query->tax_query->queries[] = $new_tax_query;
// Set the new list
$query->set( 'tax_query', $query->tax_query->queries );
}
}
// Add the function on the pre_get_posts hook, with 999 to be among the last to execute
add_action( 'pre_get_posts', 'hide_posts_tagged_as_hidden', 999 );
Code language: PHP (php)
The code above can surely be improved – so take your shot at it! 🙂