apply_filters( 'post_type_link', string $post_link, WP_Post $post, bool $leavename, bool $sample )

Filters the permalink for a post of a custom post type.


Parameters

$post_link string
The post's permalink.
$post WP_Post
The post in question.
$leavename bool
Whether to keep the post name.
$sample bool
Is it a sample permalink.

Top ↑

More Information

post_type_link is a filter applied to the permalink URL for a post or custom post type prior to being returned by the function get_post_permalink() .


Top ↑

Source

File: wp-includes/link-template.php. View all references

return apply_filters( 'post_type_link', $post_link, $post, $leavename, $sample );


Top ↑

Changelog

Changelog
Version Description
3.0.0 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 1 content
    Contributed by Steven Lin

    Example migrated from Codex:

    Append the query string for the custom post type ‘my_custom_post_type’ permalink URLs ( uses add_query_arg() and get_post_type() ):

    function append_query_string( $url, $post ) {
        if ( 'my_custom_post_type' == get_post_type( $post ) ) {
            return add_query_arg( $_GET, $url );
        }
        return $url;
    }
    add_filter( 'post_type_link', 'append_query_string', 10, 2 );
  2. Skip to note 2 content
    Contributed by thejaydip

    External Link for custom post type using meta field and post format ( Link ).

    if ( ! function_exists( 'set_external_url_post_link' ) ):
    	function set_external_url_post_link( $post_link, $post ) {
    		if ( 'custom_post_type' === $post->post_type ) {
    			$external_url  = get_post_meta( $post->ID, 'MY_META_KEY', true );
    			if ( 'link' == get_post_format( $post->ID ) && ! empty( $external_url ) ) {
    				return $external_url;
    			}
    		}
    		return $post_link;
    	}
    	add_filter( 'post_type_link', 'set_external_url_post_link', 10, 2 );
    endif;
    
    if ( ! function_exists( 'redirect_url_post_link' ) ):
    	function redirect_url_post_link() {
    		global $post;
    		if ( is_single() && ( 'custom_post_type' === get_post_type( $post ) ) ) {
    			$external_url  = get_post_meta( $post->ID, 'MY_META_KEY', true );
    			if ( 'link' == get_post_format( $post->ID ) && ! empty( $external_url ) ) {
    				wp_redirect( $external_url );
    				exit();
    			}
    		}
    	}
    	add_action('template_redirect', 'redirect_url_post_link');
    endif;

You must log in before being able to contribute a note or feedback.