get_post_permalink
Retrieves the permalink for a post of a custom post type.
Description
(string|WP_Error) get_post_permalink( (int) $id = 0, (constant) $leavename = false, (bool) $sample = false );
Returns (string|WP_Error)
The post permalink.
Parameters (3)
- 0. $id — Optional. (int)
- Post ID. Default uses the global
$post
.. - 1. $leavename — Optional. (constant) =>
false
- Optional, defaults to false. Whether to keep post name. Default false.
- 2. $sample — Optional. (bool) =>
false
- Optional, defaults to false. Is it a sample permalink. Default false.
Usage
if ( !function_exists( 'get_post_permalink' ) ) { require_once ABSPATH . WPINC . '/link-template.php'; } // Optional. Post ID. Default uses the global `$post`. $id = -1; // Optional, defaults to false. Whether to keep post name. Default false. $leavename = false; // Optional, defaults to false. Is it a sample permalink. Default false. $sample = false; // NOTICE! Understand what this does before running. $result = get_post_permalink($id, $leavename, $sample);
Defined (1)
The function is defined in the following location(s).
- /wp-includes/link-template.php
- function get_post_permalink( $id = 0, $leavename = false, $sample = false ) {
- global $wp_rewrite;
- $post = get_post($id);
- if ( is_wp_error( $post ) )
- return $post;
- $post_link = $wp_rewrite->get_extra_permastruct($post->post_type);
- $slug = $post->post_name;
- $draft_or_pending = get_post_status( $id ) && in_array( get_post_status( $id ), array( 'draft', 'pending', 'auto-draft', 'future' ) );
- $post_type = get_post_type_object($post->post_type);
- if ( $post_type->hierarchical ) {
- $slug = get_page_uri( $id );
- }
- if ( !empty($post_link) && ( !$draft_or_pending || $sample ) ) {
- if ( ! $leavename ) {
- $post_link = str_replace("%$post->post_type%", $slug, $post_link);
- }
- $post_link = home_url( user_trailingslashit($post_link) );
- } else {
- if ( $post_type->query_var && ( isset($post->post_status) && !$draft_or_pending ) )
- $post_link = add_query_arg($post_type->query_var, $slug, '');
- else
- $post_link = add_query_arg(array('post_type' => $post->post_type, 'p' => $post->ID), '');
- $post_link = home_url($post_link);
- }
- /**
- * Filters the permalink for a post of a custom post type.
- *
- * @since 3.0.0
- *
- * @param string $post_link The post's permalink.
- * @param WP_Post $post The post in question.
- * @param bool $leavename Whether to keep the post name.
- * @param bool $sample Is it a sample permalink.
- */
- return apply_filters( 'post_type_link', $post_link, $post, $leavename, $sample );
- }