WordPress.org

Make WordPress Core

Ticket #42457: 42457.1.diff

File 42457.1.diff, 1.9 KB (added by westonruter, 18 months ago)
  • src/wp-admin/customize.php

    diff --git src/wp-admin/customize.php src/wp-admin/customize.php
    index 7f9e5a9dc7..de236dbcb2 100644
    if ( $wp_customize->changeset_post_id() ) { 
    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 spawned here instead of just calling `wp_publish_post( $changeset_post->ID )`.
     47                 * The reason for this is that WP_Customize_Manager is not instantiated for customize.php with
     48                 * the `settings_previewed=false` argument. Because of this, settings cannot by reliably saved just
     49                 * since some settings will short-circuit if they detect that the current value is the same as
     50                 * the value to be saved. This is particularly true for options due to logic in the update_option()
     51                 * function. For more, See #39221. So by opening an Ajax request, then the changeset will get published
     52                 * where WP_Customize_Manager will not have been instantiated with `settings_previewed=false`.
     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        }