How can I modify my query in order to exclude certain posts by slug? Is it possible?
query_posts(array('category_name' => 'Mycat', 'posts_per_page' => -1));
Ty
You can get the post ID from the slug with the url_to_postid()
function:
$ID = url_to_postid(slug);
then just exclude the ID from your query:
query_posts(array('category_name' => 'Mycat', 'posts_per_page' => -1, 'post__not_in' => $ID ));
You can create an array of post IDs if you need to exclude multiple pages.
url_to_postid()
to get the post ID from the slug, but using query_posts()
is the wrong implementation.
Commented
Jul 25, 2012 at 13:59
post__not_in
in the above code should in fact be an array, so $ID
needs to be in square brackets. 'post__not_in' => [$ID]
Do not use query_posts()
!. Filter pre_get_posts
instead *.
<?php
function wpse59617_filter_pre_get_posts( $query ) {
// Only modify the main query
if ( ! $query->is_main_query() ) { return $query; }
// Get the ID of the post to exclude
$slug = 'some-post-slug';
$post_id = url_to_postid( $slug );
// Modify the query
$query->set( 'category_name', 'Mycat' );
$query->set( 'post__not_in', $post_id );
$query->set( 'posts_per_page', '-1' );
// Return the modified query
return $query;
}
add_filter( 'pre_get_posts', 'wpse59617_filter_pre_get_posts' );
?>
* No, really: don't use query_posts()
. Here's why.