Permalinks: Add a pre_wp_unique_post_slug filter.

Returning a non-`null` value on this fillter will cause `wp_unique_post_slug()` to return early with that value, skipping potentially expensive database queries on some sites.

Props coffee2code, javorszky, iCaleb.
Fixes #21112.



git-svn-id: https://develop.svn.wordpress.org/trunk@44454 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Gary Pendergast
2019-01-08 03:46:58 +00:00
parent b8413cc372
commit a37ee6171e
2 changed files with 46 additions and 0 deletions

View File

@@ -1357,4 +1357,30 @@ class Tests_Post extends WP_UnitTestCase {
$this->assertEquals( $changeset_data, json_decode( get_post( $post_id )->post_content, true ) );
}
/**
* Test ensuring that the post_slug can be filtered with a custom value short circuiting the built in
* function that tries to create a unique name based on the post name.
*
* @see wp_unique_post_slug()
* @ticket 21112
*/
function test_pre_wp_unique_post_slug_filter() {
add_filter( 'pre_wp_unique_post_slug', array( $this, 'filter_pre_wp_unique_post_slug' ), 10, 6 );
$post_id = $this->factory->post->create(
array(
'title' => 'An example',
'post_status' => 'publish',
'post_type' => 'page',
)
);
$post = get_post( $post_id );
$this->assertEquals( 'override-slug-' . $post->post_type, $post->post_name );
remove_filter( 'pre_wp_unique_post_slug', array( $this, 'filter_pre_wp_unique_post_slug' ), 10, 6 );
}
function filter_pre_wp_unique_post_slug( $default, $slug, $post_ID, $post_status, $post_type, $post_parent ) {
return 'override-slug-' . $post_type;
}
}