Version Description
(2018-05-23) =
- Limit showing AMP validation warnings to when
amptheme support is present. See #1132. Props westonruter. - Supply the extracted dimensions to images determined to need them; fixes regression from 0.6 this is key for Gutenberg compat. See #1117. Props westonruter.
- Ensure before/after is amended to filtered comment_reply_link. See #1118. Props westonruter.
- Force VideoPress to use html5 player for AMP. See #1125. Props yurynix.
- Soft-deprecate
AMP_Base_Sanitizer::get_body_node()instead of hard-deprecating it (with triggered notice). See #1141. Props westonruter. - Pass '/' as an argument to home_url(), preventing possible 404. See #1158, #1161. Props kienstra.
- Deprecate Jetpack helper and some parts of WPCOM helper for Jetpack 6.2. See #1149. Props gravityrail.
See 0.7.1 milestone.
Download this release
Release Info
| Developer | westonruter |
| Plugin | |
| Version | 0.7.1 |
| Comparing to | |
| See all releases | |
Code changes from version 0.7.0 to 0.7.1
- amp.php +3 -4
- includes/class-amp-theme-support.php +4 -2
- includes/sanitizers/class-amp-base-sanitizer.php +3 -4
- includes/sanitizers/class-amp-img-sanitizer.php +39 -22
- includes/templates/class-amp-post-template.php +1 -1
- includes/utils/class-amp-validation-utils.php +28 -54
- jetpack-helper.php +55 -19
- readme.txt +13 -1
- wpcom-helper.php +0 -145
amp.php
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
* Plugin URI: https://github.com/automattic/amp-wp
|
| 6 |
* Author: WordPress.com VIP, XWP, Google, and contributors
|
| 7 |
* Author URI: https://github.com/Automattic/amp-wp/graphs/contributors
|
| 8 |
-
* Version: 0.7.
|
| 9 |
* Text Domain: amp
|
| 10 |
* Domain Path: /languages/
|
| 11 |
* License: GPLv2 or later
|
|
@@ -32,7 +32,7 @@ if ( version_compare( phpversion(), '5.3', '<' ) ) {
|
|
| 32 |
|
| 33 |
define( 'AMP__FILE__', __FILE__ );
|
| 34 |
define( 'AMP__DIR__', dirname( __FILE__ ) );
|
| 35 |
-
define( 'AMP__VERSION', '0.7.
|
| 36 |
|
| 37 |
require_once AMP__DIR__ . '/includes/class-amp-autoloader.php';
|
| 38 |
AMP_Autoloader::register();
|
|
@@ -110,7 +110,6 @@ function amp_init() {
|
|
| 110 |
|
| 111 |
add_rewrite_endpoint( amp_get_slug(), EP_PERMALINK );
|
| 112 |
|
| 113 |
-
AMP_Validation_Utils::init();
|
| 114 |
AMP_Theme_Support::init();
|
| 115 |
AMP_Post_Type_Support::add_post_type_support();
|
| 116 |
add_filter( 'request', 'amp_force_query_var_value' );
|
|
@@ -122,7 +121,7 @@ function amp_init() {
|
|
| 122 |
// Redirect the old url of amp page to the updated url.
|
| 123 |
add_filter( 'old_slug_redirect_url', 'amp_redirect_old_slug_to_new_url' );
|
| 124 |
|
| 125 |
-
if ( class_exists( 'Jetpack' ) && ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
|
| 126 |
require_once AMP__DIR__ . '/jetpack-helper.php';
|
| 127 |
}
|
| 128 |
|
| 5 |
* Plugin URI: https://github.com/automattic/amp-wp
|
| 6 |
* Author: WordPress.com VIP, XWP, Google, and contributors
|
| 7 |
* Author URI: https://github.com/Automattic/amp-wp/graphs/contributors
|
| 8 |
+
* Version: 0.7.1
|
| 9 |
* Text Domain: amp
|
| 10 |
* Domain Path: /languages/
|
| 11 |
* License: GPLv2 or later
|
| 32 |
|
| 33 |
define( 'AMP__FILE__', __FILE__ );
|
| 34 |
define( 'AMP__DIR__', dirname( __FILE__ ) );
|
| 35 |
+
define( 'AMP__VERSION', '0.7.1' );
|
| 36 |
|
| 37 |
require_once AMP__DIR__ . '/includes/class-amp-autoloader.php';
|
| 38 |
AMP_Autoloader::register();
|
| 110 |
|
| 111 |
add_rewrite_endpoint( amp_get_slug(), EP_PERMALINK );
|
| 112 |
|
|
|
|
| 113 |
AMP_Theme_Support::init();
|
| 114 |
AMP_Post_Type_Support::add_post_type_support();
|
| 115 |
add_filter( 'request', 'amp_force_query_var_value' );
|
| 121 |
// Redirect the old url of amp page to the updated url.
|
| 122 |
add_filter( 'old_slug_redirect_url', 'amp_redirect_old_slug_to_new_url' );
|
| 123 |
|
| 124 |
+
if ( class_exists( 'Jetpack' ) && ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) && version_compare( JETPACK__VERSION, '6.2-alpha', '<' ) ) {
|
| 125 |
require_once AMP__DIR__ . '/jetpack-helper.php';
|
| 126 |
}
|
| 127 |
|
includes/class-amp-theme-support.php
CHANGED
|
@@ -92,6 +92,8 @@ class AMP_Theme_Support {
|
|
| 92 |
return;
|
| 93 |
}
|
| 94 |
|
|
|
|
|
|
|
| 95 |
self::purge_amp_query_vars();
|
| 96 |
self::handle_xhr_request();
|
| 97 |
|
|
@@ -793,7 +795,7 @@ class AMP_Theme_Support {
|
|
| 793 |
|
| 794 |
// Continue to show default link to wp-login when user is not logged-in.
|
| 795 |
if ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {
|
| 796 |
-
return $link;
|
| 797 |
}
|
| 798 |
|
| 799 |
$state_id = self::get_comment_form_state_id( get_the_ID() );
|
|
@@ -814,7 +816,7 @@ class AMP_Theme_Support {
|
|
| 814 |
esc_attr( sprintf( $args['reply_to_text'], $comment->comment_author ) ),
|
| 815 |
$args['reply_text']
|
| 816 |
);
|
| 817 |
-
return $link;
|
| 818 |
}
|
| 819 |
|
| 820 |
/**
|
| 92 |
return;
|
| 93 |
}
|
| 94 |
|
| 95 |
+
AMP_Validation_Utils::init();
|
| 96 |
+
|
| 97 |
self::purge_amp_query_vars();
|
| 98 |
self::handle_xhr_request();
|
| 99 |
|
| 795 |
|
| 796 |
// Continue to show default link to wp-login when user is not logged-in.
|
| 797 |
if ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {
|
| 798 |
+
return $args['before'] . $link . $args['after'];
|
| 799 |
}
|
| 800 |
|
| 801 |
$state_id = self::get_comment_form_state_id( get_the_ID() );
|
| 816 |
esc_attr( sprintf( $args['reply_to_text'], $comment->comment_author ) ),
|
| 817 |
$args['reply_text']
|
| 818 |
);
|
| 819 |
+
return $args['before'] . $link . $args['after'];
|
| 820 |
}
|
| 821 |
|
| 822 |
/**
|
includes/sanitizers/class-amp-base-sanitizer.php
CHANGED
|
@@ -159,11 +159,10 @@ abstract class AMP_Base_Sanitizer {
|
|
| 159 |
* Get HTML body as DOMElement from DOMDocument received by the constructor.
|
| 160 |
*
|
| 161 |
* @deprecated Just reference $root_element instead.
|
| 162 |
-
* @return DOMElement The body
|
| 163 |
*/
|
| 164 |
protected function get_body_node() {
|
| 165 |
-
|
| 166 |
-
return $this->root_element;
|
| 167 |
}
|
| 168 |
|
| 169 |
/**
|
|
@@ -247,7 +246,7 @@ abstract class AMP_Base_Sanitizer {
|
|
| 247 |
*/
|
| 248 |
public function add_or_append_attribute( &$attributes, $key, $value, $separator = ' ' ) {
|
| 249 |
if ( isset( $attributes[ $key ] ) ) {
|
| 250 |
-
$attributes[ $key ]
|
| 251 |
} else {
|
| 252 |
$attributes[ $key ] = $value;
|
| 253 |
}
|
| 159 |
* Get HTML body as DOMElement from DOMDocument received by the constructor.
|
| 160 |
*
|
| 161 |
* @deprecated Just reference $root_element instead.
|
| 162 |
+
* @return DOMElement The body element.
|
| 163 |
*/
|
| 164 |
protected function get_body_node() {
|
| 165 |
+
return $this->dom->getElementsByTagName( 'body' )->item( 0 );
|
|
|
|
| 166 |
}
|
| 167 |
|
| 168 |
/**
|
| 246 |
*/
|
| 247 |
public function add_or_append_attribute( &$attributes, $key, $value, $separator = ' ' ) {
|
| 248 |
if ( isset( $attributes[ $key ] ) ) {
|
| 249 |
+
$attributes[ $key ] = trim( $attributes[ $key ] . $separator . $value );
|
| 250 |
} else {
|
| 251 |
$attributes[ $key ] = $value;
|
| 252 |
}
|
includes/sanitizers/class-amp-img-sanitizer.php
CHANGED
|
@@ -157,31 +157,48 @@ class AMP_Img_Sanitizer extends AMP_Base_Sanitizer {
|
|
| 157 |
if ( ! $node instanceof DOMElement ) {
|
| 158 |
continue;
|
| 159 |
}
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 166 |
$node->setAttribute( 'width', $width );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
$node->setAttribute( 'height', $height );
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
! is_numeric( $node->getAttribute( 'height' ) )
|
| 172 |
-
) {
|
| 173 |
-
$height = self::FALLBACK_HEIGHT;
|
| 174 |
-
$node->setAttribute( 'height', $height );
|
| 175 |
-
$class = $node->hasAttribute( 'class' ) ? $node->getAttribute( 'class' ) . ' amp-wp-unknown-size amp-wp-unknown-height' : 'amp-wp-unknown-size amp-wp-unknown-height';
|
| 176 |
-
$node->setAttribute( 'class', $class );
|
| 177 |
-
} elseif (
|
| 178 |
-
! is_numeric( $node->getAttribute( 'width' ) )
|
| 179 |
-
) {
|
| 180 |
-
$width = self::FALLBACK_WIDTH;
|
| 181 |
-
$node->setAttribute( 'width', $width );
|
| 182 |
-
$class = $node->hasAttribute( 'class' ) ? $node->getAttribute( 'class' ) . ' amp-wp-unknown-size amp-wp-unknown-width' : 'amp-wp-unknown-size amp-wp-unknown-width';
|
| 183 |
-
$node->setAttribute( 'class', $class );
|
| 184 |
}
|
|
|
|
| 185 |
}
|
| 186 |
}
|
| 187 |
}
|
| 157 |
if ( ! $node instanceof DOMElement ) {
|
| 158 |
continue;
|
| 159 |
}
|
| 160 |
+
$class = $node->getAttribute( 'class' );
|
| 161 |
+
if ( ! $class ) {
|
| 162 |
+
$class = '';
|
| 163 |
+
}
|
| 164 |
+
if ( ! $dimensions ) {
|
| 165 |
+
$class .= ' amp-wp-unknown-size';
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
$width = isset( $this->args['content_max_width'] ) ? $this->args['content_max_width'] : self::FALLBACK_WIDTH;
|
| 169 |
+
$height = self::FALLBACK_HEIGHT;
|
| 170 |
+
if ( isset( $dimensions['width'] ) ) {
|
| 171 |
+
$width = $dimensions['width'];
|
| 172 |
+
}
|
| 173 |
+
if ( isset( $dimensions['height'] ) ) {
|
| 174 |
+
$height = $dimensions['height'];
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
if ( ! is_numeric( $node->getAttribute( 'width' ) ) ) {
|
| 178 |
+
|
| 179 |
+
// Let width have the right aspect ratio based on the height attribute.
|
| 180 |
+
if ( is_numeric( $node->getAttribute( 'height' ) ) && isset( $dimensions['height'] ) && isset( $dimensions['width'] ) ) {
|
| 181 |
+
$width = ( floatval( $node->getAttribute( 'height' ) ) * $dimensions['width'] ) / $dimensions['height'];
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
$node->setAttribute( 'width', $width );
|
| 185 |
+
if ( ! isset( $dimensions['width'] ) ) {
|
| 186 |
+
$class .= ' amp-wp-unknown-width';
|
| 187 |
+
}
|
| 188 |
+
}
|
| 189 |
+
if ( ! is_numeric( $node->getAttribute( 'height' ) ) ) {
|
| 190 |
+
|
| 191 |
+
// Let height have the right aspect ratio based on the width attribute.
|
| 192 |
+
if ( is_numeric( $node->getAttribute( 'width' ) ) && isset( $dimensions['width'] ) && isset( $dimensions['height'] ) ) {
|
| 193 |
+
$height = ( floatval( $node->getAttribute( 'width' ) ) * $dimensions['height'] ) / $dimensions['width'];
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
$node->setAttribute( 'height', $height );
|
| 197 |
+
if ( ! isset( $dimensions['height'] ) ) {
|
| 198 |
+
$class .= ' amp-wp-unknown-height';
|
| 199 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 200 |
}
|
| 201 |
+
$node->setAttribute( 'class', trim( $class ) );
|
| 202 |
}
|
| 203 |
}
|
| 204 |
}
|
includes/templates/class-amp-post-template.php
CHANGED
|
@@ -113,7 +113,7 @@ class AMP_Post_Template {
|
|
| 113 |
|
| 114 |
'document_title' => function_exists( 'wp_get_document_title' ) ? wp_get_document_title() : wp_title( '', false ), // Back-compat with 4.3.
|
| 115 |
'canonical_url' => get_permalink( $this->ID ),
|
| 116 |
-
'home_url' => home_url(),
|
| 117 |
'blog_name' => get_bloginfo( 'name' ),
|
| 118 |
|
| 119 |
'html_tag_attributes' => array(),
|
| 113 |
|
| 114 |
'document_title' => function_exists( 'wp_get_document_title' ) ? wp_get_document_title() : wp_title( '', false ), // Back-compat with 4.3.
|
| 115 |
'canonical_url' => get_permalink( $this->ID ),
|
| 116 |
+
'home_url' => home_url( '/' ),
|
| 117 |
'blog_name' => get_bloginfo( 'name' ),
|
| 118 |
|
| 119 |
'html_tag_attributes' => array(),
|
includes/utils/class-amp-validation-utils.php
CHANGED
|
@@ -202,13 +202,10 @@ class AMP_Validation_Utils {
|
|
| 202 |
* @return void
|
| 203 |
*/
|
| 204 |
public static function init() {
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
add_action( 'save_post', array( __CLASS__, 'handle_save_post_prompting_validation' ), 10, 2 );
|
| 210 |
-
}
|
| 211 |
-
|
| 212 |
add_action( 'edit_form_top', array( __CLASS__, 'print_edit_form_validation_status' ), 10, 2 );
|
| 213 |
add_action( 'all_admin_notices', array( __CLASS__, 'plugin_notice' ) );
|
| 214 |
add_filter( 'manage_' . self::POST_TYPE_SLUG . '_posts_columns', array( __CLASS__, 'add_post_columns' ) );
|
|
@@ -535,64 +532,41 @@ class AMP_Validation_Utils {
|
|
| 535 |
return;
|
| 536 |
}
|
| 537 |
|
| 538 |
-
|
| 539 |
-
$
|
| 540 |
-
|
| 541 |
-
|
| 542 |
-
// Incorporate frontend validation status if there is a known URL for the post.
|
| 543 |
-
if ( is_post_type_viewable( $post->post_type ) ) {
|
| 544 |
-
$url = amp_get_permalink( $post->ID );
|
| 545 |
-
|
| 546 |
-
$validation_status_post = self::get_validation_status_post( $url );
|
| 547 |
-
if ( $validation_status_post ) {
|
| 548 |
-
$data = json_decode( $validation_status_post->post_content, true );
|
| 549 |
-
if ( is_array( $data ) ) {
|
| 550 |
-
$validation_errors = array_merge( $validation_errors, $data );
|
| 551 |
-
}
|
| 552 |
-
}
|
| 553 |
}
|
| 554 |
|
| 555 |
-
|
| 556 |
-
|
| 557 |
-
self::process_markup( $post->post_content );
|
| 558 |
-
$validation_errors = array_merge(
|
| 559 |
-
$validation_errors,
|
| 560 |
-
self::$validation_errors
|
| 561 |
-
);
|
| 562 |
-
self::reset_validation_results();
|
| 563 |
|
| 564 |
-
|
| 565 |
-
|
| 566 |
-
|
| 567 |
}
|
| 568 |
|
| 569 |
-
|
|
|
|
|
|
|
|
|
|
| 570 |
return;
|
| 571 |
}
|
| 572 |
|
| 573 |
echo '<div class="notice notice-warning">';
|
| 574 |
echo '<p>';
|
| 575 |
esc_html_e( 'Warning: There is content which fails AMP validation; it will be stripped when served as AMP.', 'amp' );
|
| 576 |
-
|
| 577 |
-
|
| 578 |
-
|
| 579 |
-
|
| 580 |
-
|
| 581 |
-
|
| 582 |
-
|
| 583 |
-
|
| 584 |
-
|
| 585 |
-
|
| 586 |
-
|
| 587 |
-
|
| 588 |
-
echo sprintf(
|
| 589 |
-
' <a href="%s" aria-label="%s" target="_blank">%s</a>',
|
| 590 |
-
esc_url( self::get_debug_url( $url ) ),
|
| 591 |
-
esc_attr__( 'Validate URL on frontend but without invalid elements/attributes removed', 'amp' ),
|
| 592 |
-
esc_html__( 'Debug', 'amp' )
|
| 593 |
-
);
|
| 594 |
-
}
|
| 595 |
-
}
|
| 596 |
echo '</p>';
|
| 597 |
|
| 598 |
$results = self::summarize_validation_errors( array_unique( $validation_errors, SORT_REGULAR ) );
|
| 202 |
* @return void
|
| 203 |
*/
|
| 204 |
public static function init() {
|
| 205 |
+
add_action( 'init', array( __CLASS__, 'register_post_type' ) );
|
| 206 |
+
add_filter( 'dashboard_glance_items', array( __CLASS__, 'filter_dashboard_glance_items' ) );
|
| 207 |
+
add_action( 'rightnow_end', array( __CLASS__, 'print_dashboard_glance_styles' ) );
|
| 208 |
+
add_action( 'save_post', array( __CLASS__, 'handle_save_post_prompting_validation' ), 10, 2 );
|
|
|
|
|
|
|
|
|
|
| 209 |
add_action( 'edit_form_top', array( __CLASS__, 'print_edit_form_validation_status' ), 10, 2 );
|
| 210 |
add_action( 'all_admin_notices', array( __CLASS__, 'plugin_notice' ) );
|
| 211 |
add_filter( 'manage_' . self::POST_TYPE_SLUG . '_posts_columns', array( __CLASS__, 'add_post_columns' ) );
|
| 532 |
return;
|
| 533 |
}
|
| 534 |
|
| 535 |
+
// Skip if the post type is not viewable on the frontend, since we need a permalink to validate.
|
| 536 |
+
if ( ! is_post_type_viewable( $post->post_type ) ) {
|
| 537 |
+
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 538 |
}
|
| 539 |
|
| 540 |
+
$url = amp_get_permalink( $post->ID );
|
| 541 |
+
$validation_status_post = self::get_validation_status_post( $url );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 542 |
|
| 543 |
+
// No validation status exists yet, so there is nothing to show.
|
| 544 |
+
if ( ! $validation_status_post ) {
|
| 545 |
+
return;
|
| 546 |
}
|
| 547 |
|
| 548 |
+
$validation_errors = json_decode( $validation_status_post->post_content, true );
|
| 549 |
+
|
| 550 |
+
// No validation errors so abort.
|
| 551 |
+
if ( empty( $validation_errors ) || ! is_array( $validation_errors ) ) {
|
| 552 |
return;
|
| 553 |
}
|
| 554 |
|
| 555 |
echo '<div class="notice notice-warning">';
|
| 556 |
echo '<p>';
|
| 557 |
esc_html_e( 'Warning: There is content which fails AMP validation; it will be stripped when served as AMP.', 'amp' );
|
| 558 |
+
echo sprintf(
|
| 559 |
+
' <a href="%s" target="_blank">%s</a>',
|
| 560 |
+
esc_url( get_edit_post_link( $validation_status_post ) ),
|
| 561 |
+
esc_html__( 'Details', 'amp' )
|
| 562 |
+
);
|
| 563 |
+
echo ' | ';
|
| 564 |
+
echo sprintf(
|
| 565 |
+
' <a href="%s" aria-label="%s" target="_blank">%s</a>',
|
| 566 |
+
esc_url( self::get_debug_url( $url ) ),
|
| 567 |
+
esc_attr__( 'Validate URL on frontend but without invalid elements/attributes removed', 'amp' ),
|
| 568 |
+
esc_html__( 'Debug', 'amp' )
|
| 569 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 570 |
echo '</p>';
|
| 571 |
|
| 572 |
$results = self::summarize_validation_errors( array_unique( $validation_errors, SORT_REGULAR ) );
|
jetpack-helper.php
CHANGED
|
@@ -1,21 +1,35 @@
|
|
| 1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
add_action( 'pre_amp_render_post', 'amp_jetpack_mods' );
|
| 6 |
|
| 7 |
/**
|
| 8 |
* Disable Jetpack features that are not compatible with AMP.
|
| 9 |
*
|
| 10 |
-
|
|
|
|
| 11 |
function amp_jetpack_mods() {
|
|
|
|
|
|
|
|
|
|
| 12 |
if ( Jetpack::is_module_active( 'stats' ) ) {
|
| 13 |
add_action( 'amp_post_template_footer', 'jetpack_amp_add_stats_pixel' );
|
| 14 |
}
|
| 15 |
amp_jetpack_disable_sharing();
|
| 16 |
amp_jetpack_disable_related_posts();
|
|
|
|
| 17 |
}
|
| 18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
function amp_jetpack_disable_sharing() {
|
| 20 |
add_filter( 'sharing_show', '__return_false', 100 );
|
| 21 |
}
|
|
@@ -25,7 +39,8 @@ function amp_jetpack_disable_sharing() {
|
|
| 25 |
*
|
| 26 |
* That placeholder is useless since we can't ouput, and don't want to output Related Posts in AMP.
|
| 27 |
*
|
| 28 |
-
|
|
|
|
| 29 |
function amp_jetpack_disable_related_posts() {
|
| 30 |
if ( class_exists( 'Jetpack_RelatedPosts' ) ) {
|
| 31 |
$jprp = Jetpack_RelatedPosts::init();
|
|
@@ -33,7 +48,12 @@ function amp_jetpack_disable_related_posts() {
|
|
| 33 |
}
|
| 34 |
}
|
| 35 |
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
if ( ! has_action( 'wp_footer', 'stats_footer' ) ) {
|
| 38 |
return;
|
| 39 |
}
|
|
@@ -47,25 +67,41 @@ function jetpack_amp_add_stats_pixel( $amp_template ) {
|
|
| 47 |
*
|
| 48 |
* Looks something like:
|
| 49 |
* https://pixel.wp.com/g.gif?v=ext&j=1%3A3.9.1&blog=1234&post=5678&tz=-4&srv=example.com&host=example.com&ref=&rand=0.4107963021218808
|
|
|
|
|
|
|
| 50 |
*/
|
| 51 |
function jetpack_amp_build_stats_pixel_url() {
|
| 52 |
global $wp_the_query;
|
| 53 |
-
if ( function_exists( 'stats_build_view_data' ) ) { //
|
| 54 |
$data = stats_build_view_data();
|
| 55 |
} else {
|
| 56 |
-
$blog
|
| 57 |
-
$tz
|
| 58 |
-
$v
|
| 59 |
-
$blog_url =
|
| 60 |
-
$srv
|
| 61 |
-
$j
|
| 62 |
-
$post
|
| 63 |
-
$data
|
| 64 |
}
|
| 65 |
|
| 66 |
-
$data['host'] = isset( $_SERVER['HTTP_HOST'] ) ?
|
| 67 |
-
$data['rand'] = 'RANDOM'; //
|
| 68 |
-
$data['ref']
|
| 69 |
-
$data
|
| 70 |
return add_query_arg( $data, 'https://pixel.wp.com/g.gif' );
|
| 71 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Jetpack bits.
|
| 4 |
+
*
|
| 5 |
+
* @todo Move this into Jetpack. See https://github.com/Automattic/amp-wp/issues/1021
|
| 6 |
+
* @package AMP
|
| 7 |
+
*/
|
| 8 |
|
| 9 |
+
add_action( 'template_redirect', 'amp_jetpack_mods', 9 );
|
|
|
|
|
|
|
| 10 |
|
| 11 |
/**
|
| 12 |
* Disable Jetpack features that are not compatible with AMP.
|
| 13 |
*
|
| 14 |
+
* @since 0.2
|
| 15 |
+
*/
|
| 16 |
function amp_jetpack_mods() {
|
| 17 |
+
if ( ! is_amp_endpoint() ) {
|
| 18 |
+
return;
|
| 19 |
+
}
|
| 20 |
if ( Jetpack::is_module_active( 'stats' ) ) {
|
| 21 |
add_action( 'amp_post_template_footer', 'jetpack_amp_add_stats_pixel' );
|
| 22 |
}
|
| 23 |
amp_jetpack_disable_sharing();
|
| 24 |
amp_jetpack_disable_related_posts();
|
| 25 |
+
add_filter( 'videopress_shortcode_options', 'amp_videopress_enable_freedom_mode' );
|
| 26 |
}
|
| 27 |
|
| 28 |
+
/**
|
| 29 |
+
* Disable Jetpack sharing.
|
| 30 |
+
*
|
| 31 |
+
* @since 0.3
|
| 32 |
+
*/
|
| 33 |
function amp_jetpack_disable_sharing() {
|
| 34 |
add_filter( 'sharing_show', '__return_false', 100 );
|
| 35 |
}
|
| 39 |
*
|
| 40 |
* That placeholder is useless since we can't ouput, and don't want to output Related Posts in AMP.
|
| 41 |
*
|
| 42 |
+
* @since 0.2
|
| 43 |
+
*/
|
| 44 |
function amp_jetpack_disable_related_posts() {
|
| 45 |
if ( class_exists( 'Jetpack_RelatedPosts' ) ) {
|
| 46 |
$jprp = Jetpack_RelatedPosts::init();
|
| 48 |
}
|
| 49 |
}
|
| 50 |
|
| 51 |
+
/**
|
| 52 |
+
* Add Jetpack stats pixel.
|
| 53 |
+
*
|
| 54 |
+
* @since 0.3.2
|
| 55 |
+
*/
|
| 56 |
+
function jetpack_amp_add_stats_pixel() {
|
| 57 |
if ( ! has_action( 'wp_footer', 'stats_footer' ) ) {
|
| 58 |
return;
|
| 59 |
}
|
| 67 |
*
|
| 68 |
* Looks something like:
|
| 69 |
* https://pixel.wp.com/g.gif?v=ext&j=1%3A3.9.1&blog=1234&post=5678&tz=-4&srv=example.com&host=example.com&ref=&rand=0.4107963021218808
|
| 70 |
+
*
|
| 71 |
+
* @since 0.3.2
|
| 72 |
*/
|
| 73 |
function jetpack_amp_build_stats_pixel_url() {
|
| 74 |
global $wp_the_query;
|
| 75 |
+
if ( function_exists( 'stats_build_view_data' ) ) { // Added in <https://github.com/Automattic/jetpack/pull/3445>.
|
| 76 |
$data = stats_build_view_data();
|
| 77 |
} else {
|
| 78 |
+
$blog = Jetpack_Options::get_option( 'id' );
|
| 79 |
+
$tz = get_option( 'gmt_offset' );
|
| 80 |
+
$v = 'ext';
|
| 81 |
+
$blog_url = wp_parse_url( site_url() );
|
| 82 |
+
$srv = $blog_url['host'];
|
| 83 |
+
$j = sprintf( '%s:%s', JETPACK__API_VERSION, JETPACK__VERSION );
|
| 84 |
+
$post = $wp_the_query->get_queried_object_id();
|
| 85 |
+
$data = compact( 'v', 'j', 'blog', 'post', 'tz', 'srv' );
|
| 86 |
}
|
| 87 |
|
| 88 |
+
$data['host'] = isset( $_SERVER['HTTP_HOST'] ) ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) : ''; // input var ok.
|
| 89 |
+
$data['rand'] = 'RANDOM'; // AMP placeholder.
|
| 90 |
+
$data['ref'] = 'DOCUMENT_REFERRER'; // AMP placeholder.
|
| 91 |
+
$data = array_map( 'rawurlencode', $data );
|
| 92 |
return add_query_arg( $data, 'https://pixel.wp.com/g.gif' );
|
| 93 |
}
|
| 94 |
+
|
| 95 |
+
/**
|
| 96 |
+
* Force videopress to use html5 player that would generate <video /> tag
|
| 97 |
+
* that will be later converted to <amp-video />
|
| 98 |
+
*
|
| 99 |
+
* @since 0.7.1
|
| 100 |
+
*
|
| 101 |
+
* @param array $options videopress shortcode options.
|
| 102 |
+
* @return array videopress shortcode options with `freedom` set to true
|
| 103 |
+
*/
|
| 104 |
+
function amp_videopress_enable_freedom_mode( $options ) {
|
| 105 |
+
$options['freedom'] = true;
|
| 106 |
+
return $options;
|
| 107 |
+
}
|
readme.txt
CHANGED
|
@@ -3,7 +3,7 @@ Contributors: batmoo, joen, automattic, potatomaster, albertomedina, google, xwp
|
|
| 3 |
Tags: amp, mobile
|
| 4 |
Requires at least: 4.7
|
| 5 |
Tested up to: 4.9
|
| 6 |
-
Stable tag: 0.7.
|
| 7 |
License: GPLv2 or later
|
| 8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 9 |
Requires PHP: 5.3
|
|
@@ -44,6 +44,18 @@ Follow along with or [contribute](https://github.com/Automattic/amp-wp/blob/deve
|
|
| 44 |
|
| 45 |
== Changelog ==
|
| 46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
= 0.7.0 (2018-05-03) =
|
| 48 |
|
| 49 |
- Render an entire site as "Native AMP" if the theme calls `add_theme_support( 'amp' )`. See [#857](https://github.com/Automattic/amp-wp/pull/857), [#852](https://github.com/Automattic/amp-wp/pull/852), [#865](https://github.com/Automattic/amp-wp/pull/865), [#888](https://github.com/Automattic/amp-wp/pull/888). Props westonruter, kaitnyl, ThierryA.
|
| 3 |
Tags: amp, mobile
|
| 4 |
Requires at least: 4.7
|
| 5 |
Tested up to: 4.9
|
| 6 |
+
Stable tag: 0.7.1
|
| 7 |
License: GPLv2 or later
|
| 8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 9 |
Requires PHP: 5.3
|
| 44 |
|
| 45 |
== Changelog ==
|
| 46 |
|
| 47 |
+
= 0.7.1 (2018-05-23) =
|
| 48 |
+
|
| 49 |
+
- Limit showing AMP validation warnings to when `amp` theme support is present. See [#1132](https://github.com/Automattic/amp-wp/pull/1132). Props westonruter.
|
| 50 |
+
- Supply the extracted dimensions to images determined to need them; fixes regression from 0.6 this is key for Gutenberg compat. See [#1117](https://github.com/Automattic/amp-wp/pull/1117). Props westonruter.
|
| 51 |
+
- Ensure before/after is amended to filtered comment_reply_link. See [#1118](https://github.com/Automattic/amp-wp/pull/1118). Props westonruter.
|
| 52 |
+
- Force VideoPress to use html5 player for AMP. See [#1125](https://github.com/Automattic/amp-wp/pull/1125). Props yurynix.
|
| 53 |
+
- Soft-deprecate `AMP_Base_Sanitizer::get_body_node()` instead of hard-deprecating it (with triggered notice). See [#1141](https://github.com/Automattic/amp-wp/pull/1141). Props westonruter.
|
| 54 |
+
- Pass '/' as an argument to home_url(), preventing possible 404. See [#1158](https://github.com/Automattic/amp-wp/issues/1158), [#1161](https://github.com/Automattic/amp-wp/pull/1161). Props kienstra.
|
| 55 |
+
- Deprecate Jetpack helper and some parts of WPCOM helper for Jetpack 6.2. See [#1149](https://github.com/Automattic/amp-wp/pull/1149). Props gravityrail.
|
| 56 |
+
|
| 57 |
+
See [0.7.1 milestone](https://github.com/Automattic/amp-wp/milestone/8?closed=1).
|
| 58 |
+
|
| 59 |
= 0.7.0 (2018-05-03) =
|
| 60 |
|
| 61 |
- Render an entire site as "Native AMP" if the theme calls `add_theme_support( 'amp' )`. See [#857](https://github.com/Automattic/amp-wp/pull/857), [#852](https://github.com/Automattic/amp-wp/pull/852), [#865](https://github.com/Automattic/amp-wp/pull/865), [#888](https://github.com/Automattic/amp-wp/pull/888). Props westonruter, kaitnyl, ThierryA.
|
wpcom-helper.php
CHANGED
|
@@ -6,154 +6,9 @@
|
|
| 6 |
* @package AMP
|
| 7 |
*/
|
| 8 |
|
| 9 |
-
add_action( 'pre_amp_render_post', 'jetpack_amp_disable_the_content_filters' );
|
| 10 |
-
|
| 11 |
// Disable admin menu.
|
| 12 |
add_filter( 'amp_options_menu_is_enabled', '__return_false', 9999 );
|
| 13 |
|
| 14 |
-
/**
|
| 15 |
-
* Disable the_content filters for Jetpack.
|
| 16 |
-
*
|
| 17 |
-
* @since 0.3
|
| 18 |
-
*/
|
| 19 |
-
function jetpack_amp_disable_the_content_filters() {
|
| 20 |
-
add_filter( 'post_flair_disable', '__return_true', 99 );
|
| 21 |
-
add_filter( 'videopress_show_2015_player', '__return_true' );
|
| 22 |
-
add_filter( 'protected_embeds_use_form_post', '__return_false' );
|
| 23 |
-
|
| 24 |
-
remove_filter( 'the_title', 'widont' );
|
| 25 |
-
|
| 26 |
-
remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'filter' ), 11 );
|
| 27 |
-
remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'maybe_create_links' ), 100 );
|
| 28 |
-
}
|
| 29 |
-
|
| 30 |
-
add_action( 'amp_post_template_head', 'jetpack_amp_add_og_tags' );
|
| 31 |
-
|
| 32 |
-
/**
|
| 33 |
-
* Add Open Graph tags.
|
| 34 |
-
*
|
| 35 |
-
* @since 0.3
|
| 36 |
-
*/
|
| 37 |
-
function jetpack_amp_add_og_tags() {
|
| 38 |
-
if ( function_exists( 'jetpack_og_tags' ) ) {
|
| 39 |
-
jetpack_og_tags();
|
| 40 |
-
}
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
add_filter( 'amp_post_template_metadata', 'jetpack_amp_post_template_metadata', 10, 2 );
|
| 44 |
-
|
| 45 |
-
/**
|
| 46 |
-
* Add publisher and image metadata.
|
| 47 |
-
*
|
| 48 |
-
* @since 0.3
|
| 49 |
-
*
|
| 50 |
-
* @param array $metadata Metadata array.
|
| 51 |
-
* @param WP_Post $post Post.
|
| 52 |
-
* @return array Modified metadata array.
|
| 53 |
-
*/
|
| 54 |
-
function jetpack_amp_post_template_metadata( $metadata, $post ) {
|
| 55 |
-
if ( isset( $metadata['publisher'] ) && ! isset( $metadata['publisher']['logo'] ) ) {
|
| 56 |
-
$metadata = wpcom_amp_add_blavatar_to_metadata( $metadata );
|
| 57 |
-
}
|
| 58 |
-
|
| 59 |
-
if ( ! isset( $metadata['image'] ) ) {
|
| 60 |
-
$metadata = wpcom_amp_add_image_to_metadata( $metadata, $post );
|
| 61 |
-
}
|
| 62 |
-
|
| 63 |
-
return $metadata;
|
| 64 |
-
}
|
| 65 |
-
|
| 66 |
-
/**
|
| 67 |
-
* Add blavatar to metadata.
|
| 68 |
-
*
|
| 69 |
-
* @since 0.3
|
| 70 |
-
*
|
| 71 |
-
* @param array $metadata Metadata.
|
| 72 |
-
* @return array Metadata.
|
| 73 |
-
*/
|
| 74 |
-
function wpcom_amp_add_blavatar_to_metadata( $metadata ) {
|
| 75 |
-
if ( ! function_exists( 'blavatar_domain' ) ) {
|
| 76 |
-
return $metadata;
|
| 77 |
-
}
|
| 78 |
-
|
| 79 |
-
$size = 60;
|
| 80 |
-
|
| 81 |
-
$metadata['publisher']['logo'] = array(
|
| 82 |
-
'@type' => 'ImageObject',
|
| 83 |
-
'url' => blavatar_url( blavatar_domain( site_url() ), 'img', $size, staticize_subdomain( 'https://wordpress.com/i/favicons/apple-touch-icon-60x60.png' ) ),
|
| 84 |
-
'width' => $size,
|
| 85 |
-
'height' => $size,
|
| 86 |
-
);
|
| 87 |
-
|
| 88 |
-
return $metadata;
|
| 89 |
-
}
|
| 90 |
-
|
| 91 |
-
/**
|
| 92 |
-
* Add image to metadata.
|
| 93 |
-
*
|
| 94 |
-
* @since 0.3.2
|
| 95 |
-
*
|
| 96 |
-
* @param array $metadata Metadata.
|
| 97 |
-
* @param WP_Post $post Post.
|
| 98 |
-
* @return array Metadata.
|
| 99 |
-
*/
|
| 100 |
-
function wpcom_amp_add_image_to_metadata( $metadata, $post ) {
|
| 101 |
-
if ( ! class_exists( 'Jetpack_PostImages' ) ) {
|
| 102 |
-
return wpcom_amp_add_fallback_image_to_metadata( $metadata );
|
| 103 |
-
}
|
| 104 |
-
|
| 105 |
-
$image = Jetpack_PostImages::get_image( $post->ID, array(
|
| 106 |
-
'fallback_to_avatars' => true,
|
| 107 |
-
'avatar_size' => 200,
|
| 108 |
-
// AMP already attempts these.
|
| 109 |
-
'from_thumbnail' => false,
|
| 110 |
-
'from_attachment' => false,
|
| 111 |
-
) );
|
| 112 |
-
|
| 113 |
-
if ( empty( $image ) ) {
|
| 114 |
-
return wpcom_amp_add_fallback_image_to_metadata( $metadata );
|
| 115 |
-
}
|
| 116 |
-
|
| 117 |
-
if ( ! isset( $image['src_width'] ) ) {
|
| 118 |
-
$dimensions = wpcom_amp_extract_image_dimensions_from_getimagesize( array(
|
| 119 |
-
$image['src'] => false,
|
| 120 |
-
) );
|
| 121 |
-
|
| 122 |
-
if ( false !== $dimensions[ $image['src'] ] ) {
|
| 123 |
-
$image['src_width'] = $dimensions['width'];
|
| 124 |
-
$image['src_height'] = $dimensions['height'];
|
| 125 |
-
}
|
| 126 |
-
}
|
| 127 |
-
|
| 128 |
-
$metadata['image'] = array(
|
| 129 |
-
'@type' => 'ImageObject',
|
| 130 |
-
'url' => $image['src'],
|
| 131 |
-
'width' => $image['src_width'],
|
| 132 |
-
'height' => $image['src_height'],
|
| 133 |
-
);
|
| 134 |
-
|
| 135 |
-
return $metadata;
|
| 136 |
-
}
|
| 137 |
-
|
| 138 |
-
/**
|
| 139 |
-
* Add fallback image to metadata.
|
| 140 |
-
*
|
| 141 |
-
* @since 0.3.2
|
| 142 |
-
*
|
| 143 |
-
* @param array $metadata Metadata.
|
| 144 |
-
* @return array Metadata.
|
| 145 |
-
*/
|
| 146 |
-
function wpcom_amp_add_fallback_image_to_metadata( $metadata ) {
|
| 147 |
-
$metadata['image'] = array(
|
| 148 |
-
'@type' => 'ImageObject',
|
| 149 |
-
'url' => staticize_subdomain( 'https://wordpress.com/i/blank.jpg' ),
|
| 150 |
-
'width' => 200,
|
| 151 |
-
'height' => 200,
|
| 152 |
-
);
|
| 153 |
-
|
| 154 |
-
return $metadata;
|
| 155 |
-
}
|
| 156 |
-
|
| 157 |
add_action( 'amp_extract_image_dimensions_batch_callbacks_registered', 'wpcom_amp_extract_image_dimensions_batch_add_custom_callbacks' );
|
| 158 |
|
| 159 |
/**
|
| 6 |
* @package AMP
|
| 7 |
*/
|
| 8 |
|
|
|
|
|
|
|
| 9 |
// Disable admin menu.
|
| 10 |
add_filter( 'amp_options_menu_is_enabled', '__return_false', 9999 );
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
add_action( 'amp_extract_image_dimensions_batch_callbacks_registered', 'wpcom_amp_extract_image_dimensions_batch_add_custom_callbacks' );
|
| 13 |
|
| 14 |
/**
|
