Version Description
- Breaking change:
AMP_QUERY_VAR
is now defined right beforeamp_init
. - Breaking change: class names for elements in the default template were prefixed with
amp-wp-
. Any styles targeting these classes should be updated.
Download this release
Release Info
Developer | batmoo |
Plugin | AMP for WordPress |
Version | 0.3.1 |
Comparing to | |
See all releases |
Code changes from version 0.3 to 0.3.1
- amp.php +3 -3
- includes/amp-helper-functions.php +5 -1
- includes/amp-post-template-actions.php +1 -1
- includes/class-amp-post-template.php +5 -1
- includes/sanitizers/class-amp-base-sanitizer.php +9 -6
- includes/sanitizers/class-amp-blacklist-sanitizer.php +24 -11
- includes/sanitizers/class-amp-iframe-sanitizer.php +20 -3
- includes/sanitizers/class-amp-img-sanitizer.php +14 -0
- includes/utils/class-amp-image-dimension-extractor.php +33 -0
- readme.md +51 -3
- readme.txt +24 -1
- screenshot-1.png +0 -0
- screenshot-2.png +0 -0
- screenshot-3.png +0 -0
- screenshot-4.png +0 -0
- screenshot-5.png +0 -0
- templates/meta-author.php +2 -2
- templates/meta-taxonomy.php +2 -2
- templates/meta-time.php +1 -1
- templates/single.php +6 -6
- templates/style.php +25 -19
- wpcom-helper.php +0 -162
amp.php
CHANGED
@@ -5,14 +5,12 @@
|
|
5 |
* Plugin URI: https://github.com/automattic/amp-wp
|
6 |
* Author: Automattic
|
7 |
* Author URI: https://automattic.com
|
8 |
-
* Version: 0.3
|
9 |
* Text Domain: amp
|
10 |
* Domain Path: /languages/
|
11 |
* License: GPLv2 or later
|
12 |
*/
|
13 |
|
14 |
-
define( 'AMP_QUERY_VAR', 'amp' );
|
15 |
-
|
16 |
define( 'AMP__FILE__', __FILE__ );
|
17 |
define( 'AMP__DIR__', dirname( __FILE__ ) );
|
18 |
|
@@ -35,6 +33,8 @@ function amp_init() {
|
|
35 |
return;
|
36 |
}
|
37 |
|
|
|
|
|
38 |
do_action( 'amp_init' );
|
39 |
|
40 |
load_plugin_textdomain( 'amp', false, plugin_basename( AMP__DIR__ ) . '/languages' );
|
5 |
* Plugin URI: https://github.com/automattic/amp-wp
|
6 |
* Author: Automattic
|
7 |
* Author URI: https://automattic.com
|
8 |
+
* Version: 0.3.1
|
9 |
* Text Domain: amp
|
10 |
* Domain Path: /languages/
|
11 |
* License: GPLv2 or later
|
12 |
*/
|
13 |
|
|
|
|
|
14 |
define( 'AMP__FILE__', __FILE__ );
|
15 |
define( 'AMP__DIR__', dirname( __FILE__ ) );
|
16 |
|
33 |
return;
|
34 |
}
|
35 |
|
36 |
+
define( 'AMP_QUERY_VAR', apply_filters( 'amp_query_var', 'amp' ) );
|
37 |
+
|
38 |
do_action( 'amp_init' );
|
39 |
|
40 |
load_plugin_textdomain( 'amp', false, plugin_basename( AMP__DIR__ ) . '/languages' );
|
includes/amp-helper-functions.php
CHANGED
@@ -4,7 +4,7 @@ function amp_get_permalink( $post_id ) {
|
|
4 |
if ( '' != get_option( 'permalink_structure' ) ) {
|
5 |
$amp_url = trailingslashit( get_permalink( $post_id ) ) . user_trailingslashit( AMP_QUERY_VAR, 'single_amp' );
|
6 |
} else {
|
7 |
-
$amp_url = add_query_arg( AMP_QUERY_VAR,
|
8 |
}
|
9 |
|
10 |
return apply_filters( 'amp_get_permalink', $amp_url, $post_id );
|
@@ -16,6 +16,10 @@ function post_supports_amp( $post ) {
|
|
16 |
return false;
|
17 |
}
|
18 |
|
|
|
|
|
|
|
|
|
19 |
if ( true === apply_filters( 'amp_skip_post', false, $post->ID, $post ) ) {
|
20 |
return false;
|
21 |
}
|
4 |
if ( '' != get_option( 'permalink_structure' ) ) {
|
5 |
$amp_url = trailingslashit( get_permalink( $post_id ) ) . user_trailingslashit( AMP_QUERY_VAR, 'single_amp' );
|
6 |
} else {
|
7 |
+
$amp_url = add_query_arg( AMP_QUERY_VAR, 1, get_permalink( $post_id ) );
|
8 |
}
|
9 |
|
10 |
return apply_filters( 'amp_get_permalink', $amp_url, $post_id );
|
16 |
return false;
|
17 |
}
|
18 |
|
19 |
+
if ( post_password_required( $post ) ) {
|
20 |
+
return false;
|
21 |
+
}
|
22 |
+
|
23 |
if ( true === apply_filters( 'amp_skip_post', false, $post->ID, $post ) ) {
|
24 |
return false;
|
25 |
}
|
includes/amp-post-template-actions.php
CHANGED
@@ -28,7 +28,7 @@ function amp_post_template_add_scripts( $amp_template ) {
|
|
28 |
add_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' );
|
29 |
function amp_post_template_add_boilerplate_css( $amp_template ) {
|
30 |
?>
|
31 |
-
<style>body {
|
32 |
<?php
|
33 |
}
|
34 |
|
28 |
add_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' );
|
29 |
function amp_post_template_add_boilerplate_css( $amp_template ) {
|
30 |
?>
|
31 |
+
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
|
32 |
<?php
|
33 |
}
|
34 |
|
includes/class-amp-post-template.php
CHANGED
@@ -17,6 +17,7 @@ require_once( AMP__DIR__ . '/includes/embeds/class-amp-facebook-embed.php' );
|
|
17 |
|
18 |
class AMP_Post_Template {
|
19 |
const SITE_ICON_SIZE = 32;
|
|
|
20 |
|
21 |
private $template_dir;
|
22 |
private $data;
|
@@ -27,7 +28,10 @@ class AMP_Post_Template {
|
|
27 |
$this->ID = $post_id;
|
28 |
$this->post = get_post( $post_id );
|
29 |
|
30 |
-
$content_max_width =
|
|
|
|
|
|
|
31 |
$content_max_width = apply_filters( 'amp_content_max_width', $content_max_width );
|
32 |
|
33 |
$this->data = array(
|
17 |
|
18 |
class AMP_Post_Template {
|
19 |
const SITE_ICON_SIZE = 32;
|
20 |
+
const CONTENT_MAX_WIDTH = 600;
|
21 |
|
22 |
private $template_dir;
|
23 |
private $data;
|
28 |
$this->ID = $post_id;
|
29 |
$this->post = get_post( $post_id );
|
30 |
|
31 |
+
$content_max_width = self::CONTENT_MAX_WIDTH;
|
32 |
+
if ( isset( $GLOBALS['content_width'] ) && $GLOBALS['content_width'] > 0 ) {
|
33 |
+
$content_max_width = $GLOBALS['content_width'];
|
34 |
+
}
|
35 |
$content_max_width = apply_filters( 'amp_content_max_width', $content_max_width );
|
36 |
|
37 |
$this->data = array(
|
includes/sanitizers/class-amp-base-sanitizer.php
CHANGED
@@ -42,13 +42,16 @@ abstract class AMP_Base_Sanitizer {
|
|
42 |
|
43 |
$attributes['sizes'] = sprintf( '(min-width: %1$dpx) %1$dpx, 100vw', absint( $max_width ) );
|
44 |
|
45 |
-
$
|
46 |
-
if ( isset( $attributes['class'] ) ) {
|
47 |
-
$attributes['class'] .= ' ' . $class;
|
48 |
-
} else {
|
49 |
-
$attributes['class'] = $class;
|
50 |
-
}
|
51 |
|
52 |
return $attributes;
|
53 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
}
|
42 |
|
43 |
$attributes['sizes'] = sprintf( '(min-width: %1$dpx) %1$dpx, 100vw', absint( $max_width ) );
|
44 |
|
45 |
+
$this->add_or_append_attribute( $attributes, 'class', 'amp-wp-enforced-sizes' );
|
|
|
|
|
|
|
|
|
|
|
46 |
|
47 |
return $attributes;
|
48 |
}
|
49 |
+
|
50 |
+
public function add_or_append_attribute( &$attributes, $key, $value, $separator = ' ' ) {
|
51 |
+
if ( isset( $attributes[ $key ] ) ) {
|
52 |
+
$attributes[ $key ] .= $separator . $value;
|
53 |
+
} else {
|
54 |
+
$attributes[ $key ] = $value;
|
55 |
+
}
|
56 |
+
}
|
57 |
}
|
includes/sanitizers/class-amp-blacklist-sanitizer.php
CHANGED
@@ -38,7 +38,7 @@ class AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
38 |
}
|
39 |
|
40 |
// on* attributes (like onclick) are a special case
|
41 |
-
if ( 0 === stripos( $attribute_name, 'on' ) ) {
|
42 |
$node->removeAttribute( $attribute_name );
|
43 |
continue;
|
44 |
} elseif ( 'href' === $attribute_name ) {
|
@@ -47,15 +47,8 @@ class AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
47 |
$node->removeAttribute( $attribute_name );
|
48 |
continue;
|
49 |
}
|
50 |
-
} elseif ( 'a' === $node_name
|
51 |
-
$
|
52 |
-
$new_value = trim( preg_replace( self::PATTERN_REL_WP_ATTACHMENT, '', $old_value ) );
|
53 |
-
if ( empty( $new_value ) ) {
|
54 |
-
$node->removeAttribute( $attribute_name );
|
55 |
-
} elseif ( $old_value !== $new_value ) {
|
56 |
-
$node->setAttribute( $attribute_name, $new_value );
|
57 |
-
}
|
58 |
-
|
59 |
}
|
60 |
}
|
61 |
}
|
@@ -85,6 +78,26 @@ class AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
85 |
}
|
86 |
}
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
private function get_blacklisted_protocols() {
|
89 |
return array(
|
90 |
'javascript',
|
@@ -102,12 +115,12 @@ class AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
102 |
'param',
|
103 |
'applet',
|
104 |
'form',
|
|
|
105 |
'input',
|
106 |
'textarea',
|
107 |
'select',
|
108 |
'option',
|
109 |
'link',
|
110 |
-
'meta',
|
111 |
|
112 |
// These are converted into amp-* versions
|
113 |
//'img',
|
38 |
}
|
39 |
|
40 |
// on* attributes (like onclick) are a special case
|
41 |
+
if ( 0 === stripos( $attribute_name, 'on' ) && $attribute_name != 'on' ) {
|
42 |
$node->removeAttribute( $attribute_name );
|
43 |
continue;
|
44 |
} elseif ( 'href' === $attribute_name ) {
|
47 |
$node->removeAttribute( $attribute_name );
|
48 |
continue;
|
49 |
}
|
50 |
+
} elseif ( 'a' === $node_name ) {
|
51 |
+
$this->sanitize_a_attribute( $node, $attribute );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
}
|
53 |
}
|
54 |
}
|
78 |
}
|
79 |
}
|
80 |
|
81 |
+
private function sanitize_a_attribute( $node, $attribute ) {
|
82 |
+
$attribute_name = strtolower( $attribute->name );
|
83 |
+
|
84 |
+
if ( 'rel' === $attribute_name ) {
|
85 |
+
$old_value = $attribute->value;
|
86 |
+
$new_value = trim( preg_replace( self::PATTERN_REL_WP_ATTACHMENT, '', $old_value ) );
|
87 |
+
if ( empty( $new_value ) ) {
|
88 |
+
$node->removeAttribute( $attribute_name );
|
89 |
+
} elseif ( $old_value !== $new_value ) {
|
90 |
+
$node->setAttribute( $attribute_name, $new_value );
|
91 |
+
}
|
92 |
+
} elseif ( 'rev' === $attribute_name ) {
|
93 |
+
// rev removed from HTML5 spec, which was used by Jetpack Markdown.
|
94 |
+
$node->removeAttribute( $attribute_name );
|
95 |
+
} elseif ( 'target' === $attribute_name && '_new' === $attribute->value ) {
|
96 |
+
// _new is not allowed; swap with _blank
|
97 |
+
$node->setAttribute( $attribute_name, '_blank' );
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
private function get_blacklisted_protocols() {
|
102 |
return array(
|
103 |
'javascript',
|
115 |
'param',
|
116 |
'applet',
|
117 |
'form',
|
118 |
+
'label',
|
119 |
'input',
|
120 |
'textarea',
|
121 |
'select',
|
122 |
'option',
|
123 |
'link',
|
|
|
124 |
|
125 |
// These are converted into amp-* versions
|
126 |
//'img',
|
includes/sanitizers/class-amp-iframe-sanitizer.php
CHANGED
@@ -45,8 +45,13 @@ class AMP_Iframe_Sanitizer extends AMP_Base_Sanitizer {
|
|
45 |
$this->did_convert_elements = true;
|
46 |
|
47 |
$new_attributes = $this->filter_attributes( $old_attributes );
|
48 |
-
|
|
|
|
|
49 |
$new_attributes['height'] = self::FALLBACK_HEIGHT;
|
|
|
|
|
|
|
50 |
$new_attributes['layout'] = 'fixed-height';
|
51 |
}
|
52 |
$new_attributes = $this->enforce_sizes_attribute( $new_attributes );
|
@@ -80,14 +85,26 @@ class AMP_Iframe_Sanitizer extends AMP_Base_Sanitizer {
|
|
80 |
switch ( $name ) {
|
81 |
case 'src':
|
82 |
case 'sandbox':
|
83 |
-
case 'width':
|
84 |
case 'height':
|
85 |
-
case 'frameborder':
|
86 |
case 'class':
|
87 |
case 'sizes':
|
88 |
$out[ $name ] = $value;
|
89 |
break;
|
90 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
case 'allowfullscreen':
|
92 |
case 'allowtransparency':
|
93 |
if ( 'false' !== $value ) {
|
45 |
$this->did_convert_elements = true;
|
46 |
|
47 |
$new_attributes = $this->filter_attributes( $old_attributes );
|
48 |
+
|
49 |
+
if ( ! isset( $new_attributes['height'] ) ) {
|
50 |
+
unset( $new_attributes['width'] );
|
51 |
$new_attributes['height'] = self::FALLBACK_HEIGHT;
|
52 |
+
}
|
53 |
+
|
54 |
+
if ( ! isset( $new_attributes['width'] ) ) {
|
55 |
$new_attributes['layout'] = 'fixed-height';
|
56 |
}
|
57 |
$new_attributes = $this->enforce_sizes_attribute( $new_attributes );
|
85 |
switch ( $name ) {
|
86 |
case 'src':
|
87 |
case 'sandbox':
|
|
|
88 |
case 'height':
|
|
|
89 |
case 'class':
|
90 |
case 'sizes':
|
91 |
$out[ $name ] = $value;
|
92 |
break;
|
93 |
|
94 |
+
case 'width':
|
95 |
+
if ( $value === '100%' ) {
|
96 |
+
continue;
|
97 |
+
}
|
98 |
+
$out[ $name ] = $value;
|
99 |
+
break;
|
100 |
+
|
101 |
+
case 'frameborder':
|
102 |
+
if ( '0' !== $value && '1' !== $value ) {
|
103 |
+
$value = '0';
|
104 |
+
}
|
105 |
+
$out[ $name ] = $value;
|
106 |
+
break;
|
107 |
+
|
108 |
case 'allowfullscreen':
|
109 |
case 'allowtransparency':
|
110 |
if ( 'false' !== $value ) {
|
includes/sanitizers/class-amp-img-sanitizer.php
CHANGED
@@ -7,6 +7,9 @@ require_once( AMP__DIR__ . '/includes/utils/class-amp-image-dimension-extractor.
|
|
7 |
* Converts <img> tags to <amp-img> or <amp-anim>
|
8 |
*/
|
9 |
class AMP_Img_Sanitizer extends AMP_Base_Sanitizer {
|
|
|
|
|
|
|
10 |
public static $tag = 'img';
|
11 |
|
12 |
private static $anim_extension = '.gif';
|
@@ -31,6 +34,8 @@ class AMP_Img_Sanitizer extends AMP_Base_Sanitizer {
|
|
31 |
}
|
32 |
|
33 |
$new_attributes = $this->filter_attributes( $old_attributes );
|
|
|
|
|
34 |
if ( ! isset( $new_attributes['width'] ) || ! isset( $new_attributes['height'] ) ) {
|
35 |
$dimensions = AMP_Image_Dimension_Extractor::extract( $new_attributes['src'] );
|
36 |
if ( is_array( $dimensions ) ) {
|
@@ -39,6 +44,14 @@ class AMP_Img_Sanitizer extends AMP_Base_Sanitizer {
|
|
39 |
}
|
40 |
}
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
$new_attributes = $this->enforce_sizes_attribute( $new_attributes );
|
43 |
|
44 |
if ( $this->is_gif_url( $new_attributes['src'] ) ) {
|
@@ -73,6 +86,7 @@ class AMP_Img_Sanitizer extends AMP_Base_Sanitizer {
|
|
73 |
case 'class':
|
74 |
case 'srcset':
|
75 |
case 'sizes':
|
|
|
76 |
$out[ $name ] = $value;
|
77 |
break;
|
78 |
default;
|
7 |
* Converts <img> tags to <amp-img> or <amp-anim>
|
8 |
*/
|
9 |
class AMP_Img_Sanitizer extends AMP_Base_Sanitizer {
|
10 |
+
const FALLBACK_WIDTH = 600;
|
11 |
+
const FALLBACK_HEIGHT = 400;
|
12 |
+
|
13 |
public static $tag = 'img';
|
14 |
|
15 |
private static $anim_extension = '.gif';
|
34 |
}
|
35 |
|
36 |
$new_attributes = $this->filter_attributes( $old_attributes );
|
37 |
+
|
38 |
+
// Try to extract dimensions for the image, if not set.
|
39 |
if ( ! isset( $new_attributes['width'] ) || ! isset( $new_attributes['height'] ) ) {
|
40 |
$dimensions = AMP_Image_Dimension_Extractor::extract( $new_attributes['src'] );
|
41 |
if ( is_array( $dimensions ) ) {
|
44 |
}
|
45 |
}
|
46 |
|
47 |
+
// Final fallback when we have no dimensions.
|
48 |
+
if ( ! isset( $new_attributes['width'] ) || ! isset( $new_attributes['height'] ) ) {
|
49 |
+
$new_attributes['width'] = isset( $this->args['content_max_width'] ) ? $this->args['content_max_width'] : self::FALLBACK_WIDTH;
|
50 |
+
$new_attributes['height'] = self::FALLBACK_HEIGHT;
|
51 |
+
|
52 |
+
$this->add_or_append_attribute( $new_attributes, 'class', 'amp-wp-unknown-size' );
|
53 |
+
}
|
54 |
+
|
55 |
$new_attributes = $this->enforce_sizes_attribute( $new_attributes );
|
56 |
|
57 |
if ( $this->is_gif_url( $new_attributes['src'] ) ) {
|
86 |
case 'class':
|
87 |
case 'srcset':
|
88 |
case 'sizes':
|
89 |
+
case 'on':
|
90 |
$out[ $name ] = $value;
|
91 |
break;
|
92 |
default;
|
includes/utils/class-amp-image-dimension-extractor.php
CHANGED
@@ -8,9 +8,42 @@ class AMP_Image_Dimension_Extractor {
|
|
8 |
self::register_callbacks();
|
9 |
}
|
10 |
|
|
|
|
|
|
|
|
|
|
|
11 |
return apply_filters( 'amp_extract_image_dimensions', false, $url );
|
12 |
}
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
private static function register_callbacks() {
|
15 |
self::$callbacks_registered = true;
|
16 |
|
8 |
self::register_callbacks();
|
9 |
}
|
10 |
|
11 |
+
$url = self::normalize_url( $url );
|
12 |
+
if ( false === $url ) {
|
13 |
+
return false;
|
14 |
+
}
|
15 |
+
|
16 |
return apply_filters( 'amp_extract_image_dimensions', false, $url );
|
17 |
}
|
18 |
|
19 |
+
public static function normalize_url( $url ) {
|
20 |
+
if ( empty( $url ) ) {
|
21 |
+
return false;
|
22 |
+
}
|
23 |
+
|
24 |
+
if ( 0 === strpos( $url, 'data:' ) ) {
|
25 |
+
return false;
|
26 |
+
}
|
27 |
+
|
28 |
+
if ( 0 === strpos( $url, '//' ) ) {
|
29 |
+
return set_url_scheme( $url, 'http' );
|
30 |
+
}
|
31 |
+
|
32 |
+
$parsed = parse_url( $url );
|
33 |
+
if ( ! isset( $parsed['host'] ) ) {
|
34 |
+
$path = '';
|
35 |
+
if ( isset( $parsed['path'] ) ) {
|
36 |
+
$path .= $parsed['path'];
|
37 |
+
}
|
38 |
+
if ( isset( $parsed['query'] ) ) {
|
39 |
+
$path .= '?' . $parsed['query'];
|
40 |
+
}
|
41 |
+
$url = site_url( $path );
|
42 |
+
}
|
43 |
+
|
44 |
+
return $url;
|
45 |
+
}
|
46 |
+
|
47 |
private static function register_callbacks() {
|
48 |
self::$callbacks_registered = true;
|
49 |
|
readme.md
CHANGED
@@ -55,6 +55,36 @@ function xyz_amp_set_site_icon_url( $data ) {
|
|
55 |
|
56 |
This needs to be implemented.
|
57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
### Template Tweaks
|
59 |
|
60 |
You can tweak various parts of the template via code.
|
@@ -135,7 +165,7 @@ For the meta section of the template (i.e. author, date, taxonomies, etc.), you
|
|
135 |
Create a folder in your theme called `amp` and add a file called `meta-author.php` with the following:
|
136 |
|
137 |
```php
|
138 |
-
<li class="byline">
|
139 |
<span>Anonymous</span>
|
140 |
</li>
|
141 |
```
|
@@ -160,7 +190,7 @@ function xyz_amp_set_custom_tax_meta_template( $file, $type, $post ) {
|
|
160 |
In `t/meta-custom-tax.php`, you can add something like the following to replace the default category and tags with your custom `author` taxonomy:
|
161 |
|
162 |
```php
|
163 |
-
<li class="tax-authors">
|
164 |
<?php echo get_the_term_list( $this->get( 'post_id' ), 'xyz-author', '', ', ' ); ?>
|
165 |
</li>
|
166 |
```
|
@@ -222,7 +252,7 @@ add_action( 'amp_post_template_css', 'xyz_amp_my_additional_css_styles' );
|
|
222 |
function xyz_amp_my_additional_css_styles( $amp_template ) {
|
223 |
// only CSS here please...
|
224 |
?>
|
225 |
-
.byline amp-img {
|
226 |
border-radius: 0; /* we don't want round avatars! */
|
227 |
}
|
228 |
.my-custom-class {
|
@@ -267,6 +297,18 @@ function xyz_amp_add_analytics( $amp_template ) {
|
|
267 |
}
|
268 |
```
|
269 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
270 |
### Custom Template
|
271 |
|
272 |
If you want complete control over the look and feel of your AMP content, you can override the default template using the `amp_post_template_file` filter and pass it the path to a custom template:
|
@@ -490,3 +532,9 @@ function xyz_amp_set_custom_template( $file, $type, $post ) {
|
|
490 |
```
|
491 |
|
492 |
We may provide better ways to handle this in the future.
|
|
|
|
|
|
|
|
|
|
|
|
55 |
|
56 |
This needs to be implemented.
|
57 |
|
58 |
+
#### Logo Only
|
59 |
+
|
60 |
+
If you want to hide the site text and just show a logo, use the `amp_post_template_css` action. The following colours the title bar black, hides the site title, and replaces it with a centered logo:
|
61 |
+
|
62 |
+
```
|
63 |
+
add_action( 'amp_post_template_css', 'xyz_amp_additional_css_styles' );
|
64 |
+
|
65 |
+
function discover_fp_amp_additional_css_styles( $amp_template ) {
|
66 |
+
// only CSS here please...
|
67 |
+
?>
|
68 |
+
nav.amp-wp-title-bar {
|
69 |
+
padding: 12px 0;
|
70 |
+
background: #000;
|
71 |
+
}
|
72 |
+
nav.amp-wp-title-bar a {
|
73 |
+
background-image: url( 'https://example.com/path/to/logo.png' );
|
74 |
+
background-repeat: no-repeat;
|
75 |
+
background-size: contain;
|
76 |
+
display: block;
|
77 |
+
height: 28px;
|
78 |
+
width: 94px;
|
79 |
+
margin: 0 auto;
|
80 |
+
text-indent: -9999px;
|
81 |
+
}
|
82 |
+
<?php
|
83 |
+
}
|
84 |
+
```
|
85 |
+
|
86 |
+
Note: you will need to adjust the colours and sizes based on your brand.
|
87 |
+
|
88 |
### Template Tweaks
|
89 |
|
90 |
You can tweak various parts of the template via code.
|
165 |
Create a folder in your theme called `amp` and add a file called `meta-author.php` with the following:
|
166 |
|
167 |
```php
|
168 |
+
<li class="xyz-byline">
|
169 |
<span>Anonymous</span>
|
170 |
</li>
|
171 |
```
|
190 |
In `t/meta-custom-tax.php`, you can add something like the following to replace the default category and tags with your custom `author` taxonomy:
|
191 |
|
192 |
```php
|
193 |
+
<li class="xyz-tax-authors">
|
194 |
<?php echo get_the_term_list( $this->get( 'post_id' ), 'xyz-author', '', ', ' ); ?>
|
195 |
</li>
|
196 |
```
|
252 |
function xyz_amp_my_additional_css_styles( $amp_template ) {
|
253 |
// only CSS here please...
|
254 |
?>
|
255 |
+
.amp-wp-byline amp-img {
|
256 |
border-radius: 0; /* we don't want round avatars! */
|
257 |
}
|
258 |
.my-custom-class {
|
297 |
}
|
298 |
```
|
299 |
|
300 |
+
#### AMP Endpoint
|
301 |
+
|
302 |
+
If you don't want to use the default `/amp` endpoint, use the `amp_query_var` filter to change it to anything else.
|
303 |
+
|
304 |
+
```php
|
305 |
+
add_filter( 'amp_query_var' , 'xyz_amp_change_endpoint' );
|
306 |
+
|
307 |
+
function xyz_amp_change_endpoint( $amp_endpoint ) {
|
308 |
+
return 'foo';
|
309 |
+
}
|
310 |
+
```
|
311 |
+
|
312 |
### Custom Template
|
313 |
|
314 |
If you want complete control over the look and feel of your AMP content, you can override the default template using the `amp_post_template_file` filter and pass it the path to a custom template:
|
532 |
```
|
533 |
|
534 |
We may provide better ways to handle this in the future.
|
535 |
+
|
536 |
+
## Plugin integrations
|
537 |
+
|
538 |
+
### Yoast SEO
|
539 |
+
|
540 |
+
If you're using [Yoast SEO](https://wordpress.org/plugins/wordpress-seo/), check out the companion plugin here: https://github.com/Yoast/yoastseo-amp
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: batmoo, joen, automattic
|
|
3 |
Tags: amp, mobile
|
4 |
Requires at least: 4.4
|
5 |
Tested up to: 4.4
|
6 |
-
Stable tag: 0.3
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
@@ -34,6 +34,17 @@ You can find details about customization options at https://github.com/Automatti
|
|
34 |
|
35 |
== Changelog ==
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
= 0.3 (Feb 18, 2016) =
|
38 |
|
39 |
* Fetch dimensions for hotlinked images.
|
@@ -52,3 +63,15 @@ You can find details about customization options at https://github.com/Automatti
|
|
52 |
|
53 |
= 0.1 =
|
54 |
* Initial version
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
Tags: amp, mobile
|
4 |
Requires at least: 4.4
|
5 |
Tested up to: 4.4
|
6 |
+
Stable tag: 0.3.1
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
34 |
|
35 |
== Changelog ==
|
36 |
|
37 |
+
= 0.3.1 (Feb 24, 2016) =
|
38 |
+
|
39 |
+
* Fix AMP URLs for non-pretty permalinks.
|
40 |
+
* Fix for password-protected posts.
|
41 |
+
* Fix dimension extraction for schema-less or relative image URLs.
|
42 |
+
* Better fallback for images with no dimensions.
|
43 |
+
* Validation fixes for `a` tags.
|
44 |
+
* Updated AMP boilerplate.
|
45 |
+
* Allow `on` tags for elements.
|
46 |
+
* Prefixed class names.
|
47 |
+
|
48 |
= 0.3 (Feb 18, 2016) =
|
49 |
|
50 |
* Fetch dimensions for hotlinked images.
|
63 |
|
64 |
= 0.1 =
|
65 |
* Initial version
|
66 |
+
|
67 |
+
== Upgrade Notice ==
|
68 |
+
|
69 |
+
= 0.3.1 =
|
70 |
+
|
71 |
+
* Breaking change: `AMP_QUERY_VAR` is now defined right before `amp_init`.
|
72 |
+
* Breaking change: class names for elements in the default template were prefixed with `amp-wp-`. Any styles targeting these classes should be updated.
|
73 |
+
|
74 |
+
= 0.3 =
|
75 |
+
|
76 |
+
* Breaking change: `style.css` no longer contains the `<style> tag. If you have a custom stylesheet, you need to update it to remove the tag.
|
77 |
+
* Breaking change: `single.php` no longer includes the AMP boilerplate styles. They are instead added via the `amp_post_template_head` hook. If you have a custom template, please remove the boilerplate styles.
|
screenshot-1.png
ADDED
Binary file
|
screenshot-2.png
ADDED
Binary file
|
screenshot-3.png
ADDED
Binary file
|
screenshot-4.png
ADDED
Binary file
|
screenshot-5.png
ADDED
Binary file
|
templates/meta-author.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php $post_author = $this->get( 'post_author' ); ?>
|
2 |
-
<li class="byline">
|
3 |
<?php if ( function_exists( 'get_avatar_url' ) ) : ?>
|
4 |
<amp-img src="<?php echo esc_url( get_avatar_url( $post_author->user_email, array(
|
5 |
'size' => 24,
|
6 |
) ) ); ?>" width="24" height="24" layout="fixed"></amp-img>
|
7 |
<?php endif; ?>
|
8 |
-
<span class="author"><?php echo esc_html( $post_author->display_name ); ?></span>
|
9 |
</li>
|
1 |
<?php $post_author = $this->get( 'post_author' ); ?>
|
2 |
+
<li class="amp-wp-byline">
|
3 |
<?php if ( function_exists( 'get_avatar_url' ) ) : ?>
|
4 |
<amp-img src="<?php echo esc_url( get_avatar_url( $post_author->user_email, array(
|
5 |
'size' => 24,
|
6 |
) ) ); ?>" width="24" height="24" layout="fixed"></amp-img>
|
7 |
<?php endif; ?>
|
8 |
+
<span class="amp-wp-author"><?php echo esc_html( $post_author->display_name ); ?></span>
|
9 |
</li>
|
templates/meta-taxonomy.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php $categories = get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'amp' ) ); ?>
|
2 |
<?php if ( $categories ) : ?>
|
3 |
-
<li class="tax-category">
|
4 |
<span class="screen-reader-text">Categories:</span>
|
5 |
<?php echo $categories; ?>
|
6 |
</li>
|
@@ -8,7 +8,7 @@
|
|
8 |
|
9 |
<?php $tags = get_the_tag_list( '', _x( ', ', 'Used between list items, there is a space after the comma.', 'amp' ) ); ?>
|
10 |
<?php if ( $tags ) : ?>
|
11 |
-
<li class="tax-tag">
|
12 |
<span class="screen-reader-text">Tags:</span>
|
13 |
<?php echo $tags; ?>
|
14 |
</li>
|
1 |
<?php $categories = get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'amp' ) ); ?>
|
2 |
<?php if ( $categories ) : ?>
|
3 |
+
<li class="amp-wp-tax-category">
|
4 |
<span class="screen-reader-text">Categories:</span>
|
5 |
<?php echo $categories; ?>
|
6 |
</li>
|
8 |
|
9 |
<?php $tags = get_the_tag_list( '', _x( ', ', 'Used between list items, there is a space after the comma.', 'amp' ) ); ?>
|
10 |
<?php if ( $tags ) : ?>
|
11 |
+
<li class="amp-wp-tax-tag">
|
12 |
<span class="screen-reader-text">Tags:</span>
|
13 |
<?php echo $tags; ?>
|
14 |
</li>
|
templates/meta-time.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<li class="posted-on">
|
2 |
<time datetime="<?php echo esc_attr( date( 'c', $this->get( 'post_publish_timestamp' ) ) ); ?>">
|
3 |
<?php
|
4 |
echo esc_html(
|
1 |
+
<li class="amp-wp-posted-on">
|
2 |
<time datetime="<?php echo esc_attr( date( 'c', $this->get( 'post_publish_timestamp' ) ) ); ?>">
|
3 |
<?php
|
4 |
echo esc_html(
|
templates/single.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<html amp>
|
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
|
6 |
<link href="https://fonts.googleapis.com/css?family=Merriweather:400,400italic,700,700italic|Open+Sans:400,700,400italic,700italic" rel="stylesheet" type="text/css">
|
7 |
<?php do_action( 'amp_post_template_head', $this ); ?>
|
8 |
|
@@ -12,20 +12,20 @@
|
|
12 |
</style>
|
13 |
</head>
|
14 |
<body>
|
15 |
-
<nav class="title-bar">
|
16 |
<div>
|
17 |
<a href="<?php echo esc_url( $this->get( 'home_url' ) ); ?>">
|
18 |
<?php $site_icon_url = $this->get( 'site_icon_url' ); ?>
|
19 |
<?php if ( $site_icon_url ) : ?>
|
20 |
-
<amp-img src="<?php echo esc_url( $site_icon_url ); ?>" width="32" height="32" class="site-icon"></amp-img>
|
21 |
<?php endif; ?>
|
22 |
<?php echo esc_html( $this->get( 'blog_name' ) ); ?>
|
23 |
</a>
|
24 |
</div>
|
25 |
</nav>
|
26 |
-
<div class="content">
|
27 |
-
<h1 class="title"><?php echo esc_html( $this->get( 'post_title' ) ); ?></h1>
|
28 |
-
<ul class="meta">
|
29 |
<?php $this->load_parts( apply_filters( 'amp_post_template_meta_parts', array( 'meta-author', 'meta-time', 'meta-taxonomy' ) ) ); ?>
|
30 |
</ul>
|
31 |
<?php echo $this->get( 'post_amp_content' ); // amphtml content; no kses ?>
|
2 |
<html amp>
|
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">
|
6 |
<link href="https://fonts.googleapis.com/css?family=Merriweather:400,400italic,700,700italic|Open+Sans:400,700,400italic,700italic" rel="stylesheet" type="text/css">
|
7 |
<?php do_action( 'amp_post_template_head', $this ); ?>
|
8 |
|
12 |
</style>
|
13 |
</head>
|
14 |
<body>
|
15 |
+
<nav class="amp-wp-title-bar">
|
16 |
<div>
|
17 |
<a href="<?php echo esc_url( $this->get( 'home_url' ) ); ?>">
|
18 |
<?php $site_icon_url = $this->get( 'site_icon_url' ); ?>
|
19 |
<?php if ( $site_icon_url ) : ?>
|
20 |
+
<amp-img src="<?php echo esc_url( $site_icon_url ); ?>" width="32" height="32" class="amp-wp-site-icon"></amp-img>
|
21 |
<?php endif; ?>
|
22 |
<?php echo esc_html( $this->get( 'blog_name' ) ); ?>
|
23 |
</a>
|
24 |
</div>
|
25 |
</nav>
|
26 |
+
<div class="amp-wp-content">
|
27 |
+
<h1 class="amp-wp-title"><?php echo esc_html( $this->get( 'post_title' ) ); ?></h1>
|
28 |
+
<ul class="amp-wp-meta">
|
29 |
<?php $this->load_parts( apply_filters( 'amp_post_template_meta_parts', array( 'meta-author', 'meta-time', 'meta-taxonomy' ) ) ); ?>
|
30 |
</ul>
|
31 |
<?php echo $this->get( 'post_amp_content' ); // amphtml content; no kses ?>
|
templates/style.php
CHANGED
@@ -14,8 +14,14 @@ amp-img.aligncenter { display: block; margin-left: auto; margin-right: auto; }
|
|
14 |
max-width: 100%;
|
15 |
}
|
16 |
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
<?php $content_max_width = absint( $this->get( 'content_max_width' ) ); ?>
|
20 |
<?php if ( $content_max_width > 0 ) : ?>
|
21 |
max-width: <?php echo sprintf( '%dpx', $content_max_width ); ?>;
|
@@ -32,7 +38,7 @@ body {
|
|
32 |
padding-bottom: 100px;
|
33 |
}
|
34 |
|
35 |
-
.content {
|
36 |
padding: 16px;
|
37 |
overflow-wrap: break-word;
|
38 |
word-wrap: break-word;
|
@@ -40,7 +46,7 @@ body {
|
|
40 |
color: #3d596d;
|
41 |
}
|
42 |
|
43 |
-
.title {
|
44 |
margin: 36px 0 0 0;
|
45 |
font-size: 36px;
|
46 |
line-height: 1.258;
|
@@ -48,7 +54,7 @@ body {
|
|
48 |
color: #2e4453;
|
49 |
}
|
50 |
|
51 |
-
.meta {
|
52 |
margin-bottom: 16px;
|
53 |
}
|
54 |
|
@@ -72,8 +78,8 @@ a:focus {
|
|
72 |
|
73 |
|
74 |
/* Open Sans */
|
75 |
-
.meta,
|
76 |
-
nav.title-bar,
|
77 |
.wp-caption-text {
|
78 |
font-family: "Open Sans", sans-serif;
|
79 |
font-size: 15px;
|
@@ -81,12 +87,12 @@ nav.title-bar,
|
|
81 |
|
82 |
|
83 |
/* Meta */
|
84 |
-
ul.meta {
|
85 |
padding: 24px 0 0 0;
|
86 |
margin: 0 0 24px 0;
|
87 |
}
|
88 |
|
89 |
-
ul.meta li {
|
90 |
list-style: none;
|
91 |
display: inline-block;
|
92 |
margin: 0;
|
@@ -97,21 +103,21 @@ ul.meta li {
|
|
97 |
max-width: 300px;
|
98 |
}
|
99 |
|
100 |
-
ul.meta li:before {
|
101 |
content: "\2022";
|
102 |
margin: 0 8px;
|
103 |
}
|
104 |
|
105 |
-
ul.meta li:first-child:before {
|
106 |
display: none;
|
107 |
}
|
108 |
|
109 |
-
.meta,
|
110 |
-
.meta a {
|
111 |
color: #4f748e;
|
112 |
}
|
113 |
|
114 |
-
.meta .screen-reader-text {
|
115 |
/* from twentyfifteen */
|
116 |
clip: rect(1px, 1px, 1px, 1px);
|
117 |
height: 1px;
|
@@ -120,7 +126,7 @@ ul.meta li:first-child:before {
|
|
120 |
width: 1px;
|
121 |
}
|
122 |
|
123 |
-
.byline amp-img {
|
124 |
border-radius: 50%;
|
125 |
border: 0;
|
126 |
background: #f3f6f8;
|
@@ -131,22 +137,22 @@ ul.meta li:first-child:before {
|
|
131 |
|
132 |
|
133 |
/* Titlebar */
|
134 |
-
nav.title-bar {
|
135 |
background: #0a89c0;
|
136 |
padding: 0 16px;
|
137 |
}
|
138 |
|
139 |
-
nav.title-bar div {
|
140 |
line-height: 54px;
|
141 |
color: #fff;
|
142 |
}
|
143 |
|
144 |
-
nav.title-bar a {
|
145 |
color: #fff;
|
146 |
text-decoration: none;
|
147 |
}
|
148 |
|
149 |
-
nav.title-bar .site-icon {
|
150 |
/** site icon is 32px **/
|
151 |
float: left;
|
152 |
margin: 11px 8px 0 0;
|
14 |
max-width: 100%;
|
15 |
}
|
16 |
|
17 |
+
.amp-wp-unknown-size img {
|
18 |
+
/** Worst case scenario when we can't figure out dimensions for an image. **/
|
19 |
+
/** Force the image into a box of fixed dimensions and use object-fit to scale. **/
|
20 |
+
object-fit: contain;
|
21 |
+
}
|
22 |
+
|
23 |
+
/* Template Styles */
|
24 |
+
.amp-wp-content, .amp-wp-title-bar div {
|
25 |
<?php $content_max_width = absint( $this->get( 'content_max_width' ) ); ?>
|
26 |
<?php if ( $content_max_width > 0 ) : ?>
|
27 |
max-width: <?php echo sprintf( '%dpx', $content_max_width ); ?>;
|
38 |
padding-bottom: 100px;
|
39 |
}
|
40 |
|
41 |
+
.amp-wp-content {
|
42 |
padding: 16px;
|
43 |
overflow-wrap: break-word;
|
44 |
word-wrap: break-word;
|
46 |
color: #3d596d;
|
47 |
}
|
48 |
|
49 |
+
.amp-wp-title {
|
50 |
margin: 36px 0 0 0;
|
51 |
font-size: 36px;
|
52 |
line-height: 1.258;
|
54 |
color: #2e4453;
|
55 |
}
|
56 |
|
57 |
+
.amp-wp-meta {
|
58 |
margin-bottom: 16px;
|
59 |
}
|
60 |
|
78 |
|
79 |
|
80 |
/* Open Sans */
|
81 |
+
.amp-wp-meta,
|
82 |
+
nav.amp-wp-title-bar,
|
83 |
.wp-caption-text {
|
84 |
font-family: "Open Sans", sans-serif;
|
85 |
font-size: 15px;
|
87 |
|
88 |
|
89 |
/* Meta */
|
90 |
+
ul.amp-wp-meta {
|
91 |
padding: 24px 0 0 0;
|
92 |
margin: 0 0 24px 0;
|
93 |
}
|
94 |
|
95 |
+
ul.amp-wp-meta li {
|
96 |
list-style: none;
|
97 |
display: inline-block;
|
98 |
margin: 0;
|
103 |
max-width: 300px;
|
104 |
}
|
105 |
|
106 |
+
ul.amp-wp-meta li:before {
|
107 |
content: "\2022";
|
108 |
margin: 0 8px;
|
109 |
}
|
110 |
|
111 |
+
ul.amp-wp-meta li:first-child:before {
|
112 |
display: none;
|
113 |
}
|
114 |
|
115 |
+
.amp-wp-meta,
|
116 |
+
.amp-wp-meta a {
|
117 |
color: #4f748e;
|
118 |
}
|
119 |
|
120 |
+
.amp-wp-meta .screen-reader-text {
|
121 |
/* from twentyfifteen */
|
122 |
clip: rect(1px, 1px, 1px, 1px);
|
123 |
height: 1px;
|
126 |
width: 1px;
|
127 |
}
|
128 |
|
129 |
+
.amp-wp-byline amp-img {
|
130 |
border-radius: 50%;
|
131 |
border: 0;
|
132 |
background: #f3f6f8;
|
137 |
|
138 |
|
139 |
/* Titlebar */
|
140 |
+
nav.amp-wp-title-bar {
|
141 |
background: #0a89c0;
|
142 |
padding: 0 16px;
|
143 |
}
|
144 |
|
145 |
+
nav.amp-wp-title-bar div {
|
146 |
line-height: 54px;
|
147 |
color: #fff;
|
148 |
}
|
149 |
|
150 |
+
nav.amp-wp-title-bar a {
|
151 |
color: #fff;
|
152 |
text-decoration: none;
|
153 |
}
|
154 |
|
155 |
+
nav.amp-wp-title-bar .amp-wp-site-icon {
|
156 |
/** site icon is 32px **/
|
157 |
float: left;
|
158 |
margin: 11px 8px 0 0;
|
wpcom-helper.php
DELETED
@@ -1,162 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// WPCOM-specific things
|
4 |
-
|
5 |
-
// Add stats pixel
|
6 |
-
add_filter( 'amp_post_template_footer', 'jetpack_amp_add_stats_pixel' );
|
7 |
-
|
8 |
-
function jetpack_amp_add_stats_pixel( $amp_template ) {
|
9 |
-
?>
|
10 |
-
<amp-pixel src="<?php echo esc_url( wpcom_amp_get_pageview_url() ); ?>"></amp-pixel>
|
11 |
-
<amp-pixel src="<?php echo esc_url( wpcom_amp_get_mc_url() ); ?>"></amp-pixel>
|
12 |
-
<amp-pixel src="<?php echo esc_url( wpcom_amp_get_stats_extras_url() ); ?>"></amp-pixel>
|
13 |
-
<?php
|
14 |
-
}
|
15 |
-
|
16 |
-
function wpcom_amp_get_pageview_url() {
|
17 |
-
$stats_info = stats_collect_info();
|
18 |
-
$a = $stats_info['st_go_args'];
|
19 |
-
|
20 |
-
$url = add_query_arg( array(
|
21 |
-
'rand' => 'RANDOM', // AMP placeholder
|
22 |
-
'host' => rawurlencode( $_SERVER['HTTP_HOST'] ),
|
23 |
-
'ref' => 'DOCUMENT_REFERRER', // AMP placeholder
|
24 |
-
), 'https://pixel.wp.com/b.gif' );
|
25 |
-
$url .= '&' . stats_array_string( $a );
|
26 |
-
return $url;
|
27 |
-
}
|
28 |
-
|
29 |
-
function wpcom_amp_get_mc_url() {
|
30 |
-
return add_query_arg( array(
|
31 |
-
'rand' => 'RANDOM', // special amp placeholder
|
32 |
-
'v' => 'wpcom-no-pv',
|
33 |
-
'x_amp-views' => 'view',
|
34 |
-
), 'https://pixel.wp.com/b.gif' );
|
35 |
-
}
|
36 |
-
|
37 |
-
function wpcom_amp_get_stats_extras_url() {
|
38 |
-
$stats_extras = stats_extras();
|
39 |
-
if ( ! $stats_extras ) {
|
40 |
-
return false;
|
41 |
-
}
|
42 |
-
|
43 |
-
$url = add_query_arg( array(
|
44 |
-
'rand' => 'RANDOM', // special amp placeholder
|
45 |
-
'v' => 'wpcom-no-pv',
|
46 |
-
), 'https://pixel.wp.com/b.gif' );
|
47 |
-
|
48 |
-
$url .= '&' . stats_array_string( array(
|
49 |
-
'crypt' => base64_encode(
|
50 |
-
wp_encrypt_plus(
|
51 |
-
ltrim(
|
52 |
-
add_query_arg( $stats_extras, ''),
|
53 |
-
'?'),
|
54 |
-
8, 'url')
|
55 |
-
)
|
56 |
-
) );
|
57 |
-
|
58 |
-
return $url;
|
59 |
-
}
|
60 |
-
|
61 |
-
add_action( 'pre_amp_render_post', 'jetpack_amp_disable_the_content_filters' );
|
62 |
-
|
63 |
-
function jetpack_amp_disable_the_content_filters( $post_id ) {
|
64 |
-
add_filter( 'post_flair_disable', '__return_true', 99 );
|
65 |
-
remove_filter( 'the_title', 'widont' );
|
66 |
-
|
67 |
-
remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'filter' ), 11 );
|
68 |
-
remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'maybe_create_links' ), 100 );
|
69 |
-
}
|
70 |
-
|
71 |
-
add_action( 'amp_post_template_head', 'jetpack_amp_add_og_tags' );
|
72 |
-
|
73 |
-
function jetpack_amp_add_og_tags( $amp_template ) {
|
74 |
-
if ( function_exists( 'jetpack_og_tags' ) ) {
|
75 |
-
jetpack_og_tags();
|
76 |
-
}
|
77 |
-
}
|
78 |
-
|
79 |
-
add_filter( 'amp_post_template_metadata', 'jetpack_amp_post_template_metadata', 10, 2 );
|
80 |
-
|
81 |
-
function jetpack_amp_post_template_metadata( $metadata, $post ) {
|
82 |
-
$metadata = wpcom_amp_add_blavatar( $metadata, $post );
|
83 |
-
return $metadata;
|
84 |
-
}
|
85 |
-
|
86 |
-
function wpcom_amp_add_blavatar( $metadata, $post ) {
|
87 |
-
if ( ! function_exists( 'blavatar_domain' ) ) {
|
88 |
-
return $metadata;
|
89 |
-
}
|
90 |
-
|
91 |
-
if ( ! isset( $metadata['publisher'] ) ) {
|
92 |
-
return $metadata;
|
93 |
-
}
|
94 |
-
|
95 |
-
if ( isset( $metadata['publisher']['logo'] ) ) {
|
96 |
-
return $metadata;
|
97 |
-
}
|
98 |
-
|
99 |
-
$size = 60;
|
100 |
-
$blavatar_domain = blavatar_domain( site_url() );
|
101 |
-
if ( blavatar_exists( $blavatar_domain ) ) {
|
102 |
-
$metadata['publisher']['logo'] = array(
|
103 |
-
'@type' => 'ImageObject',
|
104 |
-
'url' => blavatar_url( $blavatar_domain, 'img', $size, false, true ),
|
105 |
-
'width' => $size,
|
106 |
-
'height' => $size,
|
107 |
-
);
|
108 |
-
}
|
109 |
-
|
110 |
-
return $metadata;
|
111 |
-
}
|
112 |
-
|
113 |
-
add_action( 'amp_extract_image_dimensions_callbacks_registered', 'wpcom_amp_extract_image_dimensions_add_custom_callbacks' );
|
114 |
-
function wpcom_amp_extract_image_dimensions_add_custom_callbacks() {
|
115 |
-
// If images are being served from Photon or WP.com files, try extracting the size using querystring.
|
116 |
-
add_action( 'amp_extract_image_dimensions', 'wpcom_amp_extract_image_dimensions_from_querystring', 9, 2 ); // Hook in before the default extractors
|
117 |
-
|
118 |
-
// Uses a special wpcom lib (wpcom_getimagesize) to extract dimensions as a last resort if we weren't able to figure them out.
|
119 |
-
add_action( 'amp_extract_image_dimensions', 'wpcom_amp_extract_image_dimensions_from_getimagesize', 99, 2 ); // Our last resort, so run late
|
120 |
-
|
121 |
-
// The wpcom override obviates this one, so take it out.
|
122 |
-
remove_action( 'amp_extract_image_dimensions', array( 'AMP_Image_Dimension_Extractor', 'extract_by_downloading_image' ), 100 );
|
123 |
-
}
|
124 |
-
|
125 |
-
function wpcom_amp_extract_image_dimensions_from_querystring( $dimensions, $url ) {
|
126 |
-
if ( is_array( $dimensions ) ) {
|
127 |
-
return $dimensions;
|
128 |
-
}
|
129 |
-
|
130 |
-
$host = parse_url( $url, PHP_URL_HOST );
|
131 |
-
if ( ! wp_endswith( $host, '.wp.com' ) || ! wp_endswith( $host, '.files.wordpress.com' ) ) {
|
132 |
-
return false;
|
133 |
-
}
|
134 |
-
|
135 |
-
$query = parse_url( $url, PHP_URL_QUERY );
|
136 |
-
$w = isset( $query['w'] ) ? absint( $query['w'] ) : false;
|
137 |
-
$h = isset( $query['h'] ) ? absint( $query['h'] ) : false;
|
138 |
-
|
139 |
-
if ( false !== $w && false !== $h ) {
|
140 |
-
return array( $w, $h );
|
141 |
-
}
|
142 |
-
|
143 |
-
return false;
|
144 |
-
}
|
145 |
-
|
146 |
-
function wpcom_amp_extract_image_dimensions_from_getimagesize( $dimensions, $url ) {
|
147 |
-
if ( is_array( $dimensions ) ) {
|
148 |
-
return $dimensions;
|
149 |
-
}
|
150 |
-
|
151 |
-
if ( ! function_exists( 'require_lib' ) ) {
|
152 |
-
return false;
|
153 |
-
}
|
154 |
-
|
155 |
-
require_lib( 'wpcom/imagesize' );
|
156 |
-
$size = wpcom_getimagesize( $url );
|
157 |
-
if ( ! is_array( $size ) ) {
|
158 |
-
return false;
|
159 |
-
}
|
160 |
-
|
161 |
-
return array( $size[0], $size[1] );
|
162 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|