How to modify the query to exclude posts by slug?

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

Related posts

Leave a Reply

2 comments

  1. 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.

  2. 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.