Version Description
(2016-10-13) =
- Fix: Prevent validation errors for
html
tag (h/t Maxime2 and everyone else that reported this error) - Fix: Handle variable name conflict that was causing content_max_width to be ignored (h/t mimancillas)
- Fix: Prevent errors when nodes don't have attributes (h/t stephenmax)
- Fix: Back-compat for 4.5 (add sanitize_hex_color function, h/t xotihcan)
- Fix: Handle gif featured images (h/t protocolil)
- Documentation updates (props troyxmccall)
Download this release
Release Info
Developer | philipjohn |
Plugin | AMP for WordPress |
Version | 0.4.2 |
Comparing to | |
See all releases |
Code changes from version 0.4.1 to 0.4.2
- amp.php +3 -2
- includes/amp-post-template-functions.php +15 -0
- includes/class-amp-content.php +2 -2
- includes/class-amp-post-template.php +28 -2
- includes/utils/class-amp-dom-utils.php +4 -0
- readme.md +4 -4
- readme.txt +13 -4
- templates/single.php +1 -1
amp.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Plugin URI: https://github.com/automattic/amp-wp
|
6 |
* Author: Automattic
|
7 |
* Author URI: https://automattic.com
|
8 |
-
* Version: 0.4.
|
9 |
* Text Domain: amp
|
10 |
* Domain Path: /languages/
|
11 |
* License: GPLv2 or later
|
@@ -13,7 +13,7 @@
|
|
13 |
|
14 |
define( 'AMP__FILE__', __FILE__ );
|
15 |
define( 'AMP__DIR__', dirname( __FILE__ ) );
|
16 |
-
define( 'AMP__VERSION', '0.4.
|
17 |
|
18 |
require_once( AMP__DIR__ . '/back-compat/back-compat.php' );
|
19 |
require_once( AMP__DIR__ . '/includes/amp-helper-functions.php' );
|
@@ -113,6 +113,7 @@ function amp_add_frontend_actions() {
|
|
113 |
|
114 |
function amp_add_post_template_actions() {
|
115 |
require_once( AMP__DIR__ . '/includes/amp-post-template-actions.php' );
|
|
|
116 |
}
|
117 |
|
118 |
function amp_prepare_render() {
|
5 |
* Plugin URI: https://github.com/automattic/amp-wp
|
6 |
* Author: Automattic
|
7 |
* Author URI: https://automattic.com
|
8 |
+
* Version: 0.4.2
|
9 |
* Text Domain: amp
|
10 |
* Domain Path: /languages/
|
11 |
* License: GPLv2 or later
|
13 |
|
14 |
define( 'AMP__FILE__', __FILE__ );
|
15 |
define( 'AMP__DIR__', dirname( __FILE__ ) );
|
16 |
+
define( 'AMP__VERSION', '0.4.2' );
|
17 |
|
18 |
require_once( AMP__DIR__ . '/back-compat/back-compat.php' );
|
19 |
require_once( AMP__DIR__ . '/includes/amp-helper-functions.php' );
|
113 |
|
114 |
function amp_add_post_template_actions() {
|
115 |
require_once( AMP__DIR__ . '/includes/amp-post-template-actions.php' );
|
116 |
+
require_once( AMP__DIR__ . '/includes/amp-post-template-functions.php' );
|
117 |
}
|
118 |
|
119 |
function amp_prepare_render() {
|
includes/amp-post-template-functions.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Was only available in Customizer > 4.6
|
4 |
+
if ( ! function_exists( 'sanitize_hex_color' ) ) {
|
5 |
+
function sanitize_hex_color( $color ) {
|
6 |
+
if ( '' === $color ) {
|
7 |
+
return '';
|
8 |
+
}
|
9 |
+
|
10 |
+
// 3 or 6 hex digits, or the empty string.
|
11 |
+
if ( preg_match('|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) {
|
12 |
+
return $color;
|
13 |
+
}
|
14 |
+
}
|
15 |
+
}
|
includes/class-amp-content.php
CHANGED
@@ -92,7 +92,7 @@ class AMP_Content {
|
|
92 |
}
|
93 |
|
94 |
class AMP_Content_Sanitizer {
|
95 |
-
public static function sanitize( $content, $sanitizer_classes, $
|
96 |
$scripts = array();
|
97 |
$styles = array();
|
98 |
$dom = AMP_DOM_Utils::get_dom_from_content( $content );
|
@@ -103,7 +103,7 @@ class AMP_Content_Sanitizer {
|
|
103 |
continue;
|
104 |
}
|
105 |
|
106 |
-
$sanitizer = new $sanitizer_class( $dom, array_merge( $
|
107 |
|
108 |
if ( ! is_subclass_of( $sanitizer, 'AMP_Base_Sanitizer' ) ) {
|
109 |
_doing_it_wrong( __METHOD__, sprintf( __( 'Sanitizer (%s) must extend `AMP_Base_Sanitizer`', 'amp' ), esc_html( $sanitizer_class ) ), '0.1' );
|
92 |
}
|
93 |
|
94 |
class AMP_Content_Sanitizer {
|
95 |
+
public static function sanitize( $content, $sanitizer_classes, $global_args = array() ) {
|
96 |
$scripts = array();
|
97 |
$styles = array();
|
98 |
$dom = AMP_DOM_Utils::get_dom_from_content( $content );
|
103 |
continue;
|
104 |
}
|
105 |
|
106 |
+
$sanitizer = new $sanitizer_class( $dom, array_merge( $global_args, $args ) );
|
107 |
|
108 |
if ( ! is_subclass_of( $sanitizer, 'AMP_Base_Sanitizer' ) ) {
|
109 |
_doing_it_wrong( __METHOD__, sprintf( __( 'Sanitizer (%s) must extend `AMP_Base_Sanitizer`', 'amp' ), esc_html( $sanitizer_class ) ), '0.1' );
|
includes/class-amp-post-template.php
CHANGED
@@ -50,6 +50,8 @@ class AMP_Post_Template {
|
|
50 |
'canonical_url' => get_permalink( $post_id ),
|
51 |
'home_url' => home_url(),
|
52 |
'blog_name' => get_bloginfo( 'name' ),
|
|
|
|
|
53 |
'body_class' => '',
|
54 |
|
55 |
'site_icon_url' => apply_filters( 'amp_site_icon_url', function_exists( 'get_site_icon_url' ) ? get_site_icon_url( self::SITE_ICON_SIZE ) : '' ),
|
@@ -84,6 +86,7 @@ class AMP_Post_Template {
|
|
84 |
$this->build_post_content();
|
85 |
$this->build_post_data();
|
86 |
$this->build_customizer_settings();
|
|
|
87 |
|
88 |
$this->data = apply_filters( 'amp_post_template_data', $this->data, $this->post );
|
89 |
}
|
@@ -198,7 +201,7 @@ class AMP_Post_Template {
|
|
198 |
|
199 |
$comments_open = comments_open( $this->ID );
|
200 |
|
201 |
-
// Don't show link if close and no comments
|
202 |
if ( ! $comments_open
|
203 |
&& ! $this->post->comment_count ) {
|
204 |
return;
|
@@ -267,7 +270,7 @@ class AMP_Post_Template {
|
|
267 |
|
268 |
$featured_image = get_post( $featured_id );
|
269 |
|
270 |
-
list( $sanitized_html ) = AMP_Content_Sanitizer::sanitize(
|
271 |
$featured_html,
|
272 |
array( 'AMP_Img_Sanitizer' => array() ),
|
273 |
array(
|
@@ -279,6 +282,14 @@ class AMP_Post_Template {
|
|
279 |
'amp_html' => $sanitized_html,
|
280 |
'caption' => $featured_image->post_excerpt,
|
281 |
) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
}
|
283 |
|
284 |
private function build_customizer_settings() {
|
@@ -347,6 +358,21 @@ class AMP_Post_Template {
|
|
347 |
return $post_image_meta;
|
348 |
}
|
349 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
private function verify_and_include( $file, $template_type ) {
|
351 |
$located_file = $this->locate_template( $file );
|
352 |
if ( $located_file ) {
|
50 |
'canonical_url' => get_permalink( $post_id ),
|
51 |
'home_url' => home_url(),
|
52 |
'blog_name' => get_bloginfo( 'name' ),
|
53 |
+
|
54 |
+
'html_tag_attributes' => array(),
|
55 |
'body_class' => '',
|
56 |
|
57 |
'site_icon_url' => apply_filters( 'amp_site_icon_url', function_exists( 'get_site_icon_url' ) ? get_site_icon_url( self::SITE_ICON_SIZE ) : '' ),
|
86 |
$this->build_post_content();
|
87 |
$this->build_post_data();
|
88 |
$this->build_customizer_settings();
|
89 |
+
$this->build_html_tag_attributes();
|
90 |
|
91 |
$this->data = apply_filters( 'amp_post_template_data', $this->data, $this->post );
|
92 |
}
|
201 |
|
202 |
$comments_open = comments_open( $this->ID );
|
203 |
|
204 |
+
// Don't show link if close and no comments
|
205 |
if ( ! $comments_open
|
206 |
&& ! $this->post->comment_count ) {
|
207 |
return;
|
270 |
|
271 |
$featured_image = get_post( $featured_id );
|
272 |
|
273 |
+
list( $sanitized_html, $featured_scripts, $featured_styles ) = AMP_Content_Sanitizer::sanitize(
|
274 |
$featured_html,
|
275 |
array( 'AMP_Img_Sanitizer' => array() ),
|
276 |
array(
|
282 |
'amp_html' => $sanitized_html,
|
283 |
'caption' => $featured_image->post_excerpt,
|
284 |
) );
|
285 |
+
|
286 |
+
if ( $featured_scripts ) {
|
287 |
+
$this->merge_data_for_key( 'amp_component_scripts', $featured_scripts );
|
288 |
+
}
|
289 |
+
|
290 |
+
if ( $featured_styles ) {
|
291 |
+
$this->add_data_by_key( 'post_amp_styles', $featured_styles );
|
292 |
+
}
|
293 |
}
|
294 |
|
295 |
private function build_customizer_settings() {
|
358 |
return $post_image_meta;
|
359 |
}
|
360 |
|
361 |
+
private function build_html_tag_attributes() {
|
362 |
+
$attributes = array();
|
363 |
+
|
364 |
+
if ( function_exists( 'is_rtl' ) && is_rtl() ) {
|
365 |
+
$attributes['dir'] = 'rtl';
|
366 |
+
}
|
367 |
+
|
368 |
+
$lang = get_bloginfo( 'language' );
|
369 |
+
if ( $lang ) {
|
370 |
+
$attributes['lang'] = $lang;
|
371 |
+
}
|
372 |
+
|
373 |
+
$this->add_data_by_key( 'html_tag_attributes', $attributes );
|
374 |
+
}
|
375 |
+
|
376 |
private function verify_and_include( $file, $template_type ) {
|
377 |
$located_file = $this->locate_template( $file );
|
378 |
if ( $located_file ) {
|
includes/utils/class-amp-dom-utils.php
CHANGED
@@ -45,6 +45,10 @@ class AMP_DOM_Utils {
|
|
45 |
|
46 |
public static function get_node_attributes_as_assoc_array( $node ) {
|
47 |
$attributes = array();
|
|
|
|
|
|
|
|
|
48 |
foreach ( $node->attributes as $attribute ) {
|
49 |
$attributes[ $attribute->nodeName ] = $attribute->nodeValue;
|
50 |
}
|
45 |
|
46 |
public static function get_node_attributes_as_assoc_array( $node ) {
|
47 |
$attributes = array();
|
48 |
+
if ( ! $node->hasAttributes() ) {
|
49 |
+
return $attributes;
|
50 |
+
}
|
51 |
+
|
52 |
foreach ( $node->attributes as $attribute ) {
|
53 |
$attributes[ $attribute->nodeName ] = $attribute->nodeValue;
|
54 |
}
|
readme.md
CHANGED
@@ -192,12 +192,12 @@ In `t/meta-custom-tax.php`, you can add something like the following to replace
|
|
192 |
</li>
|
193 |
```
|
194 |
|
195 |
-
##### Example: Remove Author from `
|
196 |
|
197 |
This will completely remove the author section:
|
198 |
|
199 |
```php
|
200 |
-
add_filter( '
|
201 |
|
202 |
function xyz_amp_remove_author_meta( $meta_parts ) {
|
203 |
foreach ( array_keys( $meta_parts, 'meta-author', true ) as $key ) {
|
@@ -207,12 +207,12 @@ function xyz_amp_remove_author_meta( $meta_parts ) {
|
|
207 |
}
|
208 |
```
|
209 |
|
210 |
-
##### Example: Add Comment Count to `
|
211 |
|
212 |
This adds a new section to display the comment count:
|
213 |
|
214 |
```php
|
215 |
-
add_filter( '
|
216 |
|
217 |
function xyz_amp_add_comment_count_meta( $meta_parts ) {
|
218 |
$meta_parts[] = 'xyz-meta-comment-count';
|
192 |
</li>
|
193 |
```
|
194 |
|
195 |
+
##### Example: Remove Author from `header_meta`
|
196 |
|
197 |
This will completely remove the author section:
|
198 |
|
199 |
```php
|
200 |
+
add_filter( 'amp_post_article_header_meta', 'xyz_amp_remove_author_meta' );
|
201 |
|
202 |
function xyz_amp_remove_author_meta( $meta_parts ) {
|
203 |
foreach ( array_keys( $meta_parts, 'meta-author', true ) as $key ) {
|
207 |
}
|
208 |
```
|
209 |
|
210 |
+
##### Example: Add Comment Count to `footer_meta`
|
211 |
|
212 |
This adds a new section to display the comment count:
|
213 |
|
214 |
```php
|
215 |
+
add_filter( 'amp_post_article_footer_meta', 'xyz_amp_add_comment_count_meta' );
|
216 |
|
217 |
function xyz_amp_add_comment_count_meta( $meta_parts ) {
|
218 |
$meta_parts[] = 'xyz-meta-comment-count';
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
Contributors: batmoo, joen, automattic, potatomaster
|
3 |
Tags: amp, mobile
|
4 |
Requires at least: 4.4
|
5 |
-
Tested up to: 4.
|
6 |
-
Stable tag: 0.4.
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
@@ -25,7 +25,7 @@ Follow along with or contribute to the development of this plugin at https://git
|
|
25 |
|
26 |
1. Upload the folder to the `/wp-content/plugins/` directory
|
27 |
1. Activate the plugin through the 'Plugins' menu in WordPress
|
28 |
-
1. You may need to refresh your permalinks by going to `Settings > Permalinks` and tapping the `Save` button.
|
29 |
|
30 |
== Frequently Asked Questions ==
|
31 |
|
@@ -53,7 +53,16 @@ A wise green Yoda once said, "Patience you must have, my young padawan." We're w
|
|
53 |
|
54 |
== Changelog ==
|
55 |
|
56 |
-
= 0.4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
|
58 |
- Fix: Don't fire the_content for featured image output
|
59 |
- Fix: Don't show comment link when disabled and no comments on post (h/t neotrope)
|
2 |
Contributors: batmoo, joen, automattic, potatomaster
|
3 |
Tags: amp, mobile
|
4 |
Requires at least: 4.4
|
5 |
+
Tested up to: 4.8
|
6 |
+
Stable tag: 0.4.2
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
25 |
|
26 |
1. Upload the folder to the `/wp-content/plugins/` directory
|
27 |
1. Activate the plugin through the 'Plugins' menu in WordPress
|
28 |
+
1. You may need to refresh your permalinks by going to `Settings > Permalinks` and tapping the `Save` button.
|
29 |
|
30 |
== Frequently Asked Questions ==
|
31 |
|
53 |
|
54 |
== Changelog ==
|
55 |
|
56 |
+
= 0.4.2 (2016-10-13) =
|
57 |
+
|
58 |
+
- Fix: Prevent validation errors for `html` tag (h/t Maxime2 and everyone else that reported this error)
|
59 |
+
- Fix: Handle variable name conflict that was causing content_max_width to be ignored (h/t mimancillas)
|
60 |
+
- Fix: Prevent errors when nodes don't have attributes (h/t stephenmax)
|
61 |
+
- Fix: Back-compat for 4.5 (add sanitize_hex_color function, h/t xotihcan)
|
62 |
+
- Fix: Handle gif featured images (h/t protocolil)
|
63 |
+
- Documentation updates (props troyxmccall)
|
64 |
+
|
65 |
+
= 0.4.1 (2016-10-10) =
|
66 |
|
67 |
- Fix: Don't fire the_content for featured image output
|
68 |
- Fix: Don't show comment link when disabled and no comments on post (h/t neotrope)
|
templates/single.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
<!doctype html>
|
2 |
-
<html amp <?php
|
3 |
<head>
|
4 |
<meta charset="utf-8">
|
5 |
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
|
1 |
<!doctype html>
|
2 |
+
<html amp <?php echo AMP_HTML_Utils::build_attributes_string( $this->get( 'html_tag_attributes' ) ); ?>>
|
3 |
<head>
|
4 |
<meta charset="utf-8">
|
5 |
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
|