WP_Customize_Selective_Refresh::handle_render_partials_request() – Handles the Ajax request to return the rendered partials for the requested placements.

You appear to be a bot. Output may be restricted

Description

Handles the Ajax request to return the rendered partials for the requested placements.

Usage

WP_Customize_Selective_Refresh::handle_render_partials_request();

Parameters

Returns

void

Source

File name: wordpress/wp-includes/customize/class-wp-customize-selective-refresh.php
Lines:

1 to 100 of 137
  public function handle_render_partials_request() {
    if ( ! $this->WP_Customize_Selective_Refresh::is_render_partials_request() ) {
      return;
    }

    /*
		 * Note that is_customize_preview() returning true will entail that the
		 * user passed the 'customize' capability check and the nonce check, since
		 * WP_Customize_Manager::setup_theme() is where the previewing flag is set.
		 */
    if ( ! is_customize_preview() ) {
      wp_send_json_error( 'expected_customize_preview', 403 );
    } elseif ( ! isset( $_POST['partials'] ) ) {
      wp_send_json_error( 'missing_partials', 400 );
    }

    // Ensure that doing selective refresh on 404 template doesn't result in fallback rendering behavior (full refreshes).
    status_header( 200 );

    $partials = json_decode( wp_unslash( $_POST['partials'] ), true );

    if ( ! is_array( $partials ) ) {
      wp_send_json_error( 'malformed_partials' );
    }

    $this->WP_Customize_Selective_Refresh::add_dynamic_partials( array_keys( $partials ) );

    
/**
 * Fires immediately before partials are rendered.
 *
 * Plugins may do things like call wp_enqueue_scripts() and gather a list of the scripts
 * and styles which may get enqueued in the response.
 *
 * @since 4.5.0
 *
 * @param WP_Customize_Selective_Refresh $refresh  Selective refresh component.
 * @param array                          $partials Placements' context data for the partials rendered in the request.
 *                                                 The array is keyed by partial ID, with each item being an array of
 *                                                 the placements' context data.
 */
    do_action( 'customize_render_partials_before', $this, $partials );

    set_error_handler( array( $this, 'handle_error' ), error_reporting() );

    $contents = array();

    foreach ( $partials as $partial_id => $container_contexts ) {
      $this->current_partial_id = $partial_id;

      if ( ! is_array( $container_contexts ) ) {
        wp_send_json_error( 'malformed_container_contexts' );
      }

      $partial = $this->WP_Customize_Selective_Refresh::get_partial( $partial_id );

      if ( ! $partial || ! $partial->check_capabilities() ) {
        $contents[ $partial_id ] = null;
        continue;
      }

      $contents[ $partial_id ] = array();

      // @todo The array should include not only the contents, but also whether the container is included?
      if ( empty( $container_contexts ) ) {
        // Since there are no container contexts, render just once.
        $contents[ $partial_id ][] = $partial->render( null );
      } else {
        foreach ( $container_contexts as $container_context ) {
          $contents[ $partial_id ][] = $partial->render( $container_context );
        }
      }
    }
    $this->current_partial_id = null;

    restore_error_handler();

    
/**
 * Fires immediately after partials are rendered.
 *
 * Plugins may do things like call wp_footer() to scrape scripts output and return them
 * via the {@see 'customize_render_partials_response'} filter.
 *
 * @since 4.5.0
 *
 * @param WP_Customize_Selective_Refresh $refresh  Selective refresh component.
 * @param array                          $partials Placements' context data for the partials rendered in the request.
 *                                                 The array is keyed by partial ID, with each item being an array of
 *                                                 the placements' context data.
 */
    do_action( 'customize_render_partials_after', $this, $partials );

    $response = array(
      'contents' => $contents,
    );

    if ( defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ) {
      $response['errors'] = $this->triggered_errors;
    }

    $setting_validities             = $this->manager->validate_setting_values( $this->manager->unsanitized_post_values() );
 

 View on GitHub View on Trac