20

I can get the permalink of a specific post tag or category, but what if I want to get the permalink of a custom post type? I can't find anything in the Codex or anywhere else about how to do this.

5 Answers 5

32

How about href="<?php echo get_post_type_archive_link( $post_type ); ?>", where $post_type is your post type?

Further reading: Codex

1
  • Small improvement; <?php echo get_post_type_archive_link( $post->post_type ); ?> Using $post->post_type instead of $post_type gives the slug directly.
    – rwzdoorn
    Apr 19, 2022 at 13:40
8

Within the loop, you can simply use the_permalink(). Outside of the loop, you can use get_permalink( $id ).

1
  • 2
    That returns the permalink of a specific post or page. I want to return the permalink of a post type. So, for instance, if there is a post type called "movie reviews", and the permalink of that post type is "www.website.com/movie-reviews", how do I get that permalink? Maybe this is not a true permalink technically, I just want the URL of that post type. Oct 25, 2011 at 12:48
1

Or, for what it's worth, get_term_link($term, $taxonomy); - Codex.

0
1

I know this post might be old but just in case someone else is searching the function that does this, here's the one i wrote. $post_type must be passed as a variable :)

if( !function_exists( 'wp_get_post_type_link' )  ){
    function wp_get_post_type_link( &$post_type ){

        global $wp_rewrite; 

        if ( ! $post_type_obj = get_post_type_object( $post_type ) )
            return false;

        if ( get_option( 'permalink_structure' ) && is_array( $post_type_obj->rewrite ) ) {

            $struct = $post_type_obj->rewrite['slug'] ;
            if ( $post_type_obj->rewrite['with_front'] )
                $struct = $wp_rewrite->front . $struct;
            else
                $struct = $wp_rewrite->root . $struct;

            $link = home_url( user_trailingslashit( $struct, 'post_type_archive' ) );       

        } else {
            $link = home_url( '?post_type=' . $post_type );
        }

        return apply_filters( 'the_permalink', $link );
    }
}

Hope it helps ! :)

0

@Stefan KRUGER

curious why the value is passed by reference: &$post_type

aside: I dont' understand why i can supply an answer, which is not what this is, but NOT a comment, which is what this is. that seems backward.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.