mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-23 17:48:01 +01:00
wp_unique_post_slug() fixes. Props Denis-de-Bernardy. fixes #9726
git-svn-id: http://svn.automattic.com/wordpress/trunk@11467 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
6b559e2124
commit
b664e6a452
@ -1737,27 +1737,56 @@ function check_and_publish_future_post($post_id) {
|
|||||||
* @return string unique slug for the post, based on $post_name (with a -1, -2, etc. suffix)
|
* @return string unique slug for the post, based on $post_name (with a -1, -2, etc. suffix)
|
||||||
*/
|
*/
|
||||||
function wp_unique_post_slug($slug, $post_ID, $post_status, $post_type, $post_parent) {
|
function wp_unique_post_slug($slug, $post_ID, $post_status, $post_type, $post_parent) {
|
||||||
|
if ( in_array( $post_status, array( 'draft', 'pending' ) ) )
|
||||||
|
return $slug;
|
||||||
|
|
||||||
global $wpdb, $wp_rewrite;
|
global $wpdb, $wp_rewrite;
|
||||||
if ( !in_array( $post_status, array( 'draft', 'pending' ) ) ) {
|
$hierarchical_post_types = apply_filters('hierarchical_post_types', array('page'));
|
||||||
$hierarchical_post_types = apply_filters('hierarchical_post_types', array('page', 'attachment'));
|
if ( 'attachment' == $post_type ) {
|
||||||
if ( in_array($post_type, $hierarchical_post_types) ) {
|
// Attachment slugs must be unique across all types.
|
||||||
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( '" . implode("', '", $wpdb->escape($hierarchical_post_types)) . "' ) AND ID != %d AND post_parent = %d LIMIT 1";
|
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND ID != %d LIMIT 1";
|
||||||
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $slug, $post_ID, $post_parent));
|
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $slug, $post_ID));
|
||||||
} else {
|
|
||||||
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d AND post_parent = %d LIMIT 1";
|
|
||||||
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $slug, $post_type, $post_ID, $post_parent));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $post_name_check || in_array($slug, $wp_rewrite->feeds) ) {
|
if ( $post_name_check || in_array($slug, $wp_rewrite->feeds) ) {
|
||||||
$suffix = 2;
|
$suffix = 2;
|
||||||
do {
|
do {
|
||||||
$alt_post_name = substr($slug, 0, 200-(strlen($suffix)+1)). "-$suffix";
|
$alt_post_name = substr($slug, 0, 200-(strlen($suffix)+1)). "-$suffix";
|
||||||
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $alt_post_name, $post_type, $post_ID, $post_parent));
|
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $alt_post_name, $post_ID));
|
||||||
|
$suffix++;
|
||||||
|
} while ($post_name_check);
|
||||||
|
$slug = $alt_post_name;
|
||||||
|
}
|
||||||
|
} elseif ( in_array($post_type, $hierarchical_post_types) ) {
|
||||||
|
// Page slugs must be unique within their own trees. Pages are in a
|
||||||
|
// separate namespace than posts so page slugs are allowed to overlap post slugs.
|
||||||
|
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( '" . implode("', '", $wpdb->escape($hierarchical_post_types)) . "' ) AND ID != %d AND post_parent = %d LIMIT 1";
|
||||||
|
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $slug, $post_ID, $post_parent));
|
||||||
|
|
||||||
|
if ( $post_name_check || in_array($slug, $wp_rewrite->feeds) ) {
|
||||||
|
$suffix = 2;
|
||||||
|
do {
|
||||||
|
$alt_post_name = substr($slug, 0, 200-(strlen($suffix)+1)). "-$suffix";
|
||||||
|
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $alt_post_name, $post_ID, $post_parent));
|
||||||
|
$suffix++;
|
||||||
|
} while ($post_name_check);
|
||||||
|
$slug = $alt_post_name;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Post slugs must be unique across all posts.
|
||||||
|
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d LIMIT 1";
|
||||||
|
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $slug, $post_type, $post_ID));
|
||||||
|
|
||||||
|
if ( $post_name_check || in_array($slug, $wp_rewrite->feeds) ) {
|
||||||
|
$suffix = 2;
|
||||||
|
do {
|
||||||
|
$alt_post_name = substr($slug, 0, 200-(strlen($suffix)+1)). "-$suffix";
|
||||||
|
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $alt_post_name, $post_type, $post_ID));
|
||||||
$suffix++;
|
$suffix++;
|
||||||
} while ($post_name_check);
|
} while ($post_name_check);
|
||||||
$slug = $alt_post_name;
|
$slug = $alt_post_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $slug;
|
return $slug;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2453,18 +2482,7 @@ function wp_insert_attachment($object, $file = false, $parent = 0) {
|
|||||||
$post_name = sanitize_title($post_name);
|
$post_name = sanitize_title($post_name);
|
||||||
|
|
||||||
// expected_slashed ($post_name)
|
// expected_slashed ($post_name)
|
||||||
$post_name_check = $wpdb->get_var( $wpdb->prepare( "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_status = 'inherit' AND ID != %d LIMIT 1", $post_name, $post_ID ) );
|
$post_name = wp_unique_post_slug($post_name, $post_ID, $post_status, $post_type, $post_parent);
|
||||||
|
|
||||||
if ( $post_name_check ) {
|
|
||||||
$suffix = 2;
|
|
||||||
while ( $post_name_check ) {
|
|
||||||
$alt_post_name = $post_name . "-$suffix";
|
|
||||||
// expected_slashed ($alt_post_name, $post_name)
|
|
||||||
$post_name_check = $wpdb->get_var( $wpdb->prepare( "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_status = 'inherit' AND ID != %d LIMIT 1", $alt_post_name, $post_ID ) );
|
|
||||||
$suffix++;
|
|
||||||
}
|
|
||||||
$post_name = $alt_post_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( empty($post_date) )
|
if ( empty($post_date) )
|
||||||
$post_date = current_time('mysql');
|
$post_date = current_time('mysql');
|
||||||
|
Loading…
Reference in New Issue
Block a user