WP_Customize_Manager::add_state_query_params PHP Method

add_state_query_params() public method

Add customize state query params to a given URL if preview is allowed.
See also: wp_redirect()
See also: WP_Customize_Manager::get_allowed_url()
Since: 4.7.0
public add_state_query_params ( string $url ) : string
$url string URL.
return string URL.
    public function add_state_query_params($url)
    {
        $parsed_original_url = wp_parse_url($url);
        $is_allowed = false;
        foreach ($this->get_allowed_urls() as $allowed_url) {
            $parsed_allowed_url = wp_parse_url($allowed_url);
            $is_allowed = $parsed_allowed_url['scheme'] === $parsed_original_url['scheme'] && $parsed_allowed_url['host'] === $parsed_original_url['host'] && 0 === strpos($parsed_original_url['path'], $parsed_allowed_url['path']);
            if ($is_allowed) {
                break;
            }
        }
        if ($is_allowed) {
            $query_params = array('customize_changeset_uuid' => $this->changeset_uuid());
            if (!$this->is_theme_active()) {
                $query_params['customize_theme'] = $this->get_stylesheet();
            }
            if ($this->messenger_channel) {
                $query_params['customize_messenger_channel'] = $this->messenger_channel;
            }
            $url = add_query_arg($query_params, $url);
        }
        return $url;
    }

Usage Example

 /**
  * Test WP_Customize_Manager::add_state_query_params().
  *
  * @ticket 30937
  * @covers WP_Customize_Manager::add_state_query_params()
  */
 function test_add_state_query_params()
 {
     $preview_theme = $this->get_inactive_core_theme();
     $uuid = wp_generate_uuid4();
     $messenger_channel = 'preview-0';
     $wp_customize = new WP_Customize_Manager(array('changeset_uuid' => $uuid, 'messenger_channel' => $messenger_channel));
     $url = $wp_customize->add_state_query_params(home_url('/'));
     $parsed_url = wp_parse_url($url);
     parse_str($parsed_url['query'], $query_params);
     $this->assertArrayHasKey('customize_messenger_channel', $query_params);
     $this->assertArrayHasKey('customize_changeset_uuid', $query_params);
     $this->assertArrayNotHasKey('customize_theme', $query_params);
     $this->assertEquals($uuid, $query_params['customize_changeset_uuid']);
     $this->assertEquals($messenger_channel, $query_params['customize_messenger_channel']);
     $uuid = wp_generate_uuid4();
     $wp_customize = new WP_Customize_Manager(array('changeset_uuid' => $uuid, 'messenger_channel' => null, 'theme' => $preview_theme));
     $url = $wp_customize->add_state_query_params(home_url('/'));
     $parsed_url = wp_parse_url($url);
     parse_str($parsed_url['query'], $query_params);
     $this->assertArrayNotHasKey('customize_messenger_channel', $query_params);
     $this->assertArrayHasKey('customize_changeset_uuid', $query_params);
     $this->assertArrayHasKey('customize_theme', $query_params);
     $this->assertEquals($uuid, $query_params['customize_changeset_uuid']);
     $this->assertEquals($preview_theme, $query_params['customize_theme']);
     $uuid = wp_generate_uuid4();
     $wp_customize = new WP_Customize_Manager(array('changeset_uuid' => $uuid, 'messenger_channel' => null, 'theme' => $preview_theme));
     $url = $wp_customize->add_state_query_params('http://not-allowed.example.com/?q=1');
     $parsed_url = wp_parse_url($url);
     parse_str($parsed_url['query'], $query_params);
     $this->assertArrayNotHasKey('customize_messenger_channel', $query_params);
     $this->assertArrayNotHasKey('customize_changeset_uuid', $query_params);
     $this->assertArrayNotHasKey('customize_theme', $query_params);
 }
WP_Customize_Manager