Prevent access to single post types

Say that I want to make a post type called ‘press’ and it is mostly concerned with linking a title with a PDF document of a press clipping. I want to show all of these as an archive… so something like site.com/press but i don’t want any single post template pages. so no site.com/press/article1 or site.com/press/article2. other than not including a link in my archive template (which just obscures it but doesn’t negate their existence or prevent access to the single posts) how can i prevent a visitor from inadvertently accessing the single posts. how could i re-direct them back to the /press archive?

Related posts

Leave a Reply

2 comments

  1. The fast way

    In your .htaccess add a rule

    RedirectMatch Permanent ^/press/.+ /press/
    

    Plugin way

    Hook into template_redirect and redirect all requests to a single entry:

    add_action( 'template_redirect', 'wpse_45164_redirect_press' );
    
    function wpse_45164_redirect_press()
    {
        if ( ! is_singular( 'press' ) )
            return;
    
        wp_redirect( get_post_type_archive_link( 'press' ), 301 );
        exit;
    }
    

    (Caveat: not tested)

  2. An alternative to redirecting users would be to make it so this page isn’t generated to begin with. Setting your post type to 'public' => false, 'publicly_queryable' => true will create a non-public post type. Then you can build a custom page template to act as the archive, with a custom query in the page template.

    See the register_post_type function for more info.