-
Notifications
You must be signed in to change notification settings - Fork 383
Handling Media
By default, the plugin attempts to gracefully handle the following media elements in your content:
- images (converted from
img=>amp-imgoramp-anim) - videos (converted from
video=>amp-video; Note: Flash is not supported) - audio (converted from
audio=>amp-audio) - iframes (converted from
iframes=>amp-iframes) - YouTube, Instagram, Twitter, and Vine oEmbeds and shortcodes (converted from the embed to the matching
amp-component)
For additional media content such as custom shortcodes, oEmbeds or manually inserted embeds, ads, etc. there are several customization options available and outlined below.
If your embeds/media use standard iframes, you can choose to do nothing and let the plugin handle things. They should "just work" in most cases.
All existing hooks on the_content will continue to work. This can be a good or bad thing. Good, because existing plugin integrations will continue to work. Bad, because not all added content may make sense in an AMP context.
You can add additional callbacks to the_content filter to output additional content as needed. Use the is_amp_endpoint() function to check if an AMP version of a post is being viewed. However, we recommend using an Embed Handler instead.
Caveat: with this method, if you add a custom component that requires inclusion of a script, you will need to add that script manually to the template using the amp_post_template_head action.
In your existing shortcode or oEmbed callbacks, you can branch using the is_amp_endpoint() and output customized content for AMP content.
The same caveat about scripts for custom AMP components applies.
Embed Handlers are helper classes to inject AMP-specific content for your oEmbeds and shortcodes.
Embed Handlers register the embeds they handle using standard WordPress functions such as add_shortcode. For working examples, check out the existing implementations for Instagram, Twitter, etc. as guides to build your own.
While the primary purpose of Embed Handlers is for use with embeds, you can use them for adding AMP-specific the_content callbacks as well.
Your Embed Handler class needs to extend the AMP_Base_Embed_Handler class.
Note: make sure to set proper priorities or remove existing callbacks for your regular content.
In classes/class-amp-related-posts-embed.php:
class XYZ_AMP_Related_Posts_Embed extends AMP_Base_Embed_Handler {
public function register_embed() {
// If we have an existing callback we are overriding, remove it.
remove_filter( 'the_content', 'xyz_add_related_posts' );
// Add our new callback
add_filter( 'the_content', array( $this, 'add_related_posts' ) );
}
public function unregister_embed() {
// Let's clean up after ourselves, just in case.
add_filter( 'the_content', 'xyz_add_related_posts' );
remove_filter( 'the_content', array( $this, 'add_related_posts' ) );
}
public function get_scripts() {
return array( 'amp-mustache' => 'https://cdn.ampproject.org/v0/amp-mustache-0.1.js' );
}
public function add_related_posts( $content ) {
// See https://github.com/ampproject/amphtml/blob/master/extensions/amp-list/amp-list.md for details on amp-list
$related_posts_list = '
<amp-list src="https://data.com/articles.json?ref=CANONICAL_URL" width=300 height=200 layout=responsive>
<template type="amp-mustache">
<div>
<amp-img src="{{imageUrl}}" width=50 height=50></amp-img>
{{title}}
</div>
</template>
<div overflow role=button aria-label="Show more" class="list-overflow">
Show more
</div>
</amp-list>';
$content .= $related_posts_list;
return $content;
}
}add_filter( 'amp_content_embed_handlers', 'xyz_amp_add_related_embed', 10, 2 );
function xyz_amp_add_related_embed( $embed_handler_classes, $post ) {
require_once( dirname( __FILE__ ) . '/classes/class-amp-related-posts-embed.php' );
$embed_handler_classes[ 'XYZ_AMP_Related_Posts_Embed' ] = array();
return $embed_handler_classes;
}Notice: Please also see the plugin documentation on amp-wp.org