Make WordPress Core


Ignore:
Timestamp:
10/30/2016 08:20:54 PM (9 years ago)
Author:
westonruter
Message:

Customize: Prevent auto-draft post/page stubs from being saved with empty slugs or published with non-unique slugs.

  • Allow WP_Customize_Nav_Menus::insert_auto_draft_post() to take full post array to pass to wp_insert_post(), except for post_status. Require post_title.
  • Ensure empty post_name gets explicitly set to slugified post_title.
  • Explicitly allow only post_type and post_title params in WP_Customize_Nav_Menus::ajax_insert_auto_draft_post().
  • Use wp_update_post() instead of wp_publish_post() to ensure unique slugs are assigned to published auto-draft posts.
  • Re-use WP_Customize_Nav_Menus::insert_auto_draft_post() when inserting stubs from starter content.


See #38114, #38013, #34923.
Fixes #38539.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-customize-manager.php

    r39003 r39038  
    960960        if ( ! empty( $posts ) ) {
    961961            foreach ( array_keys( $posts ) as $post_symbol ) {
    962                 $posts[ $post_symbol ]['ID'] = wp_insert_post( wp_slash( array_merge(
    963                     $posts[ $post_symbol ],
    964                     array( 'post_status' => 'auto-draft' )
    965                 ) ) );
     962                $r = $this->nav_menus->insert_auto_draft_post( $posts[ $post_symbol ] );
     963                if ( $r instanceof WP_Post ) {
     964                    $posts[ $post_symbol ]['ID'] = $r->ID;
     965                }
    966966            }
    967967            $this->set_post_value( 'nav_menus_created_posts', wp_list_pluck( $posts, 'ID' ) ); // This is why nav_menus component is dependency for adding posts.
Note: See TracChangeset for help on using the changeset viewer.