wp_filter_oembed_result

函数


wp_filter_oembed_result ( $result, $data, $url )
参数
  • (string)
    $result
    The oEmbed HTML result.
    Required:
  • (object)
    $data
    A data object result from an oEmbed provider.
    Required:
  • (string)
    $url
    The URL of the content to be embedded.
    Required:
返回值
  • (string) The filtered and sanitized oEmbed result.
定义位置
  • wp-includes/embed.php
    , line 909
引入
4.4.0
弃用

过滤给定的oEmbed HTML。

如果`$url`不在可信任的提供者名单上,我们需要对HTML进行严格的过滤以保证安全。

只过滤’rich’和’video’响应类型。

function wp_filter_oembed_result( $result, $data, $url ) {
	if ( false === $result || ! in_array( $data->type, array( 'rich', 'video' ), true ) ) {
		return $result;
	}

	$wp_oembed = _wp_oembed_get_object();

	// Don't modify the HTML for trusted providers.
	if ( false !== $wp_oembed->get_provider( $url, array( 'discover' => false ) ) ) {
		return $result;
	}

	$allowed_html = array(
		'a'          => array(
			'href' => true,
		),
		'blockquote' => array(),
		'iframe'     => array(
			'src'          => true,
			'width'        => true,
			'height'       => true,
			'frameborder'  => true,
			'marginwidth'  => true,
			'marginheight' => true,
			'scrolling'    => true,
			'title'        => true,
		),
	);

	$html = wp_kses( $result, $allowed_html );

	preg_match( '|(
.*?
)?.*()|ms', $html, $content ); // We require at least the iframe to exist. if ( empty( $content[2] ) ) { return false; } $html = $content[1] . $content[2]; preg_match( '/ src=(['"])(.*?)1/', $html, $results ); if ( ! empty( $results ) ) { $secret = wp_generate_password( 10, false ); $url = esc_url( "{$results[2]}#?secret=$secret" ); $q = $results[1]; $html = str_replace( $results[0], ' src=' . $q . $url . $q . ' data-secret=' . $q . $secret . $q, $html ); $html = str_replace( '