Alert: This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.
wp_filter_wp_template_unique_post_slug( string $override_slug, string $slug, int $post_id, string $post_status, string $post_type ): string
Generates a unique slug for templates.
Parameters
-
$override_slug
string Required -
The filtered value of the slug (starts as
null
from apply_filter). -
$slug
string Required -
The original/un-filtered slug (post_name).
-
$post_id
int Required -
Post ID.
-
$post_status
string Required -
No uniqueness checks are made if the post is still draft or pending.
-
$post_type
string Required -
Post type.
Return
string The original, desired slug.
Source
File: wp-includes/theme-templates.php
.
View all references
function wp_filter_wp_template_unique_post_slug( $override_slug, $slug, $post_id, $post_status, $post_type ) {
if ( 'wp_template' !== $post_type && 'wp_template_part' !== $post_type ) {
return $override_slug;
}
if ( ! $override_slug ) {
$override_slug = $slug;
}
/*
* Template slugs must be unique within the same theme.
* TODO - Figure out how to update this to work for a multi-theme environment.
* Unfortunately using `get_the_terms()` for the 'wp-theme' term does not work
* in the case of new entities since is too early in the process to have been saved
* to the entity. So for now we use the currently activated theme for creation.
*/
$theme = get_stylesheet();
$terms = get_the_terms( $post_id, 'wp_theme' );
if ( $terms && ! is_wp_error( $terms ) ) {
$theme = $terms[0]->name;
}
$check_query_args = array(
'post_name__in' => array( $override_slug ),
'post_type' => $post_type,
'posts_per_page' => 1,
'no_found_rows' => true,
'post__not_in' => array( $post_id ),
'tax_query' => array(
array(
'taxonomy' => 'wp_theme',
'field' => 'name',
'terms' => $theme,
),
),
);
$check_query = new WP_Query( $check_query_args );
$posts = $check_query->posts;
if ( count( $posts ) > 0 ) {
$suffix = 2;
do {
$query_args = $check_query_args;
$alt_post_name = _truncate_post_slug( $override_slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix";
$query_args['post_name__in'] = array( $alt_post_name );
$query = new WP_Query( $query_args );
$suffix++;
} while ( count( $query->posts ) > 0 );
$override_slug = $alt_post_name;
}
return $override_slug;
}
Changelog
Version | Description |
---|---|
5.8.0 | Introduced. |