Ticket #21013: 21013.10.patch

File 21013.10.patch, 2.6 KB (added by SergeyBiryukov, 9 months ago)
  • wp-includes/post.php

     
    29642964                if ( $post_name_check || in_array( $slug, $feeds ) || apply_filters( 'wp_unique_post_slug_is_bad_attachment_slug', false, $slug ) ) { 
    29652965                        $suffix = 2; 
    29662966                        do { 
    2967                                 $alt_post_name = substr ($slug, 0, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; 
    2968                                 $post_name_check = $wpdb->get_var( $wpdb->prepare($check_sql, $alt_post_name, $post_ID ) ); 
     2967                                $alt_post_name = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; 
     2968                                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_ID ) ); 
    29692969                                $suffix++; 
    29702970                        } while ( $post_name_check ); 
    29712971                        $slug = $alt_post_name; 
     
    29792979                if ( $post_name_check || in_array( $slug, $feeds ) || preg_match( "@^($wp_rewrite->pagination_base)?\d+$@", $slug )  || apply_filters( 'wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post_type, $post_parent ) ) { 
    29802980                        $suffix = 2; 
    29812981                        do { 
    2982                                 $alt_post_name = substr( $slug, 0, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; 
     2982                                $alt_post_name = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; 
    29832983                                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_ID, $post_parent ) ); 
    29842984                                $suffix++; 
    29852985                        } while ( $post_name_check ); 
     
    29932993                if ( $post_name_check || in_array( $slug, $feeds ) || apply_filters( 'wp_unique_post_slug_is_bad_flat_slug', false, $slug, $post_type ) ) { 
    29942994                        $suffix = 2; 
    29952995                        do { 
    2996                                 $alt_post_name = substr( $slug, 0, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; 
     2996                                $alt_post_name = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; 
    29972997                                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_type, $post_ID ) ); 
    29982998                                $suffix++; 
    29992999                        } while ( $post_name_check ); 
     
    30053005} 
    30063006 
    30073007/** 
     3008 * Truncates a post slug with UTF-8 characters. 
     3009 * 
     3010 * @since 3.5.0 
     3011 * @access private 
     3012 * 
     3013 * @param string $slug The slug to truncate. 
     3014 * @param int $length Max length of the slug. 
     3015 * @return string The truncated slug. 
     3016 */ 
     3017function _truncate_post_slug( $slug, $length = 200 ) { 
     3018        if ( strlen( $slug ) > $length ) { 
     3019                if ( urldecode( $slug ) === $slug ) 
     3020                        $slug = substr( $slug, 0, $length ); 
     3021                else 
     3022                        $slug = utf8_uri_encode( urldecode( $slug ), $length ); 
     3023        } 
     3024 
     3025        return rtrim( $slug, '-' ); 
     3026} 
     3027 
     3028/** 
    30083029 * Adds tags to a post. 
    30093030 * 
    30103031 * @uses wp_set_post_tags() Same first two parameters, but the last parameter is always set to true.