get_sample_permalink() WordPress Function
The get_sample_permalink() function is a useful tool for developers who want to programmatically generate permalinks for their content. This function takes two arguments: the post ID of the content you want to generate a permalink for, and the desired permalink structure. It then returns a sample permalink for the content, based on the specified permalink structure. This can be useful for creating custom permalink structures, or for troubleshooting permalink problems.
get_sample_permalink( int|WP_Post $id, string|null $title = null, string|null $name = null ) #
Returns a sample permalink based on the post name.
Parameters
- $id
(int|WP_Post)(Required)Post ID or post object.
- $title
(string|null)(Optional) Title to override the post's current title when generating the post name.
Default value: null
- $name
(string|null)(Optional) Name to override the post name.
Default value: null
Return
(array) Array containing the sample permalink with placeholder for the post name, and the post name.
- (string) The permalink with placeholder for the post name.
- '1'
(string) The post name.
Source
File: wp-admin/includes/post.php
function get_sample_permalink( $id, $title = null, $name = null ) { $post = get_post( $id ); if ( ! $post ) { return array( '', '' ); } $ptype = get_post_type_object( $post->post_type ); $original_status = $post->post_status; $original_date = $post->post_date; $original_name = $post->post_name; // Hack: get_permalink() would return plain permalink for drafts, so we will fake that our post is published. if ( in_array( $post->post_status, array( 'draft', 'pending', 'future' ), true ) ) { $post->post_status = 'publish'; $post->post_name = sanitize_title( $post->post_name ? $post->post_name : $post->post_title, $post->ID ); } // If the user wants to set a new name -- override the current one. // Note: if empty name is supplied -- use the title instead, see #6072. if ( ! is_null( $name ) ) { $post->post_name = sanitize_title( $name ? $name : $title, $post->ID ); } $post->post_name = wp_unique_post_slug( $post->post_name, $post->ID, $post->post_status, $post->post_type, $post->post_parent ); $post->filter = 'sample'; $permalink = get_permalink( $post, true ); // Replace custom post_type token with generic pagename token for ease of use. $permalink = str_replace( "%$post->post_type%", '%pagename%', $permalink ); // Handle page hierarchy. if ( $ptype->hierarchical ) { $uri = get_page_uri( $post ); if ( $uri ) { $uri = untrailingslashit( $uri ); $uri = strrev( stristr( strrev( $uri ), '/' ) ); $uri = untrailingslashit( $uri ); } /** This filter is documented in wp-admin/edit-tag-form.php */ $uri = apply_filters( 'editable_slug', $uri, $post ); if ( ! empty( $uri ) ) { $uri .= '/'; } $permalink = str_replace( '%pagename%', "{$uri}%pagename%", $permalink ); } /** This filter is documented in wp-admin/edit-tag-form.php */ $permalink = array( $permalink, apply_filters( 'editable_slug', $post->post_name, $post ) ); $post->post_status = $original_status; $post->post_date = $original_date; $post->post_name = $original_name; unset( $post->filter ); /** * Filters the sample permalink. * * @since 4.4.0 * * @param array $permalink { * Array containing the sample permalink with placeholder for the post name, and the post name. * * @type string $0 The permalink with placeholder for the post name. * @type string $1 The post name. * } * @param int $post_id Post ID. * @param string $title Post title. * @param string $name Post name (slug). * @param WP_Post $post Post object. */ return apply_filters( 'get_sample_permalink', $permalink, $post->ID, $title, $name, $post ); }
Expand full source codeCollapse full source codeView on TracView on GitHub
Changelog
Version | Description |
---|---|
2.5.0 | Introduced. |