Make WordPress Core

Ticket #42457: 42457.diff

File 42457.diff, 1.7 KB (added by jeremyfelt, 7 years ago)
  • src/wp-admin/customize.php

     
    4242                get_post_time( 'G', true, $changeset_post ) < time()
    4343        );
    4444        if ( $missed_schedule ) {
    45                 wp_publish_post( $changeset_post->ID );
     45                /*
     46                 * Note that an Ajax request spawns here instead of just calling `wp_publish_post( $changeset_post->ID )`.
     47                 *
     48                 * Because WP_Customize_Manager is not instantiated for customize.php with the `settings_previewed=false`
     49                 * argument, settings cannot be reliably saved. Some logic short-circuits if the current value is the
     50                 * same as the value being saved. This is particularly true for options via `update_option()`.
     51                 *
     52                 * By opening an Ajax request, this is avoided and the changeset is published. See #39221.
     53                 */
     54                $nonces = $wp_customize->get_nonces();
     55                $request_args = array(
     56                        'nonce' => $nonces['save'],
     57                        'customize_changeset_uuid' => $wp_customize->changeset_uuid(),
     58                        'wp_customize' => 'on',
     59                        'customize_changeset_status' => 'publish',
     60                );
     61                ob_start();
     62                ?>
     63                <?php wp_print_scripts( array( 'wp-util' ) ); ?>
     64                <script>
     65                        wp.ajax.post( 'customize_save', <?php echo wp_json_encode( $request_args ); ?> );
     66                </script>
     67                <?php
     68                $script = ob_get_clean();
     69
    4670                wp_die(
    4771                        '<h1>' . __( 'Your scheduled changes just published' ) . '</h1>' .
    48                         '<p><a href="' . esc_url( remove_query_arg( 'changeset_uuid' ) ) . '">' . __( 'Customize New Changes' ) . '</a></p>',
     72                        '<p><a href="' . esc_url( remove_query_arg( 'changeset_uuid' ) ) . '">' . __( 'Customize New Changes' ) . '</a></p>' . $script,
    4973                        200
    5074                );
    5175        }