amp_tag, self::URL_PATTERN, array( $this, 'oembed' ), -1 ); } public function unregister_embed() { wp_embed_unregister_handler( $this->amp_tag, -1 ); } public function oembed( $matches, $attr, $url, $rawattr ) { return $this->render( array( 'url' => $url ) ); } public function render( $args ) { $args = wp_parse_args( $args, array( 'url' => false, ) ); if ( empty( $args['url'] ) ) { return ''; } $this->did_convert_elements = true; return AMP_HTML_Utils::build_tag( $this->amp_tag, array( 'data-href' => $args['url'], 'layout' => 'responsive', 'width' => $this->args['width'], 'height' => $this->args['height'], ) ); } /** * Sanitized
tags to . * * @param DOMDocument $dom DOM. */ public function sanitize_raw_embeds( $dom ) { /** * Node list. * * @var DOMNodeList $node */ $nodes = $dom->getElementsByTagName( $this->sanitize_tag ); $num_nodes = $nodes->length; if ( 0 === $num_nodes ) { return; } for ( $i = $num_nodes - 1; $i >= 0; $i-- ) { $node = $nodes->item( $i ); if ( ! $node instanceof DOMElement ) { continue; } $embed_type = $this->get_embed_type( $node ); if ( null !== $embed_type ) { $this->create_amp_facebook_and_replace_node( $dom, $node, $embed_type ); } } } /** * Get embed type. * * @param DOMElement $node The DOMNode to adjust and replace. * @return string|null Embed type or null if not detected. */ private function get_embed_type( $node ) { $class_attr = $node->getAttribute( 'class' ); if ( null !== $class_attr && $node->hasAttribute( 'data-href' ) ) { if ( false !== strpos( $class_attr, 'fb-post' ) ) { return 'post'; } elseif ( false !== strpos( $class_attr, 'fb-video' ) ) { return 'video'; } return false !== strpos( $class_attr, 'fb-video' ) ? 'video' : 'post'; } return null; } /** * Create amp-facebook and replace node. * * @param DOMDocument $dom The HTML Document. * @param DOMElement $node The DOMNode to adjust and replace. * @param string $embed_type Embed type. */ private function create_amp_facebook_and_replace_node( $dom, $node, $embed_type ) { $amp_facebook_node = AMP_DOM_Utils::create_node( $dom, $this->amp_tag, array( 'data-href' => $node->getAttribute( 'data-href' ), 'data-embed-as' => $embed_type, 'layout' => 'responsive', 'width' => $this->DEFAULT_WIDTH, 'height' => $this->DEFAULT_HEIGHT, ) ); $node->parentNode->replaceChild( $amp_facebook_node, $node ); $this->did_convert_elements = true; } }