forked from gabrielperezs/amp-wp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwpcom-helper.php
105 lines (80 loc) · 3.46 KB
/
wpcom-helper.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
// WPCOM-specific things
add_action( 'pre_amp_render_post', 'jetpack_amp_disable_the_content_filters' );
function jetpack_amp_disable_the_content_filters( $post_id ) {
add_filter( 'post_flair_disable', '__return_true', 99 );
remove_filter( 'the_title', 'widont' );
remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'filter' ), 11 );
remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'maybe_create_links' ), 100 );
}
add_action( 'amp_post_template_head', 'jetpack_amp_add_og_tags' );
function jetpack_amp_add_og_tags( $amp_template ) {
if ( function_exists( 'jetpack_og_tags' ) ) {
jetpack_og_tags();
}
}
add_filter( 'amp_post_template_metadata', 'jetpack_amp_post_template_metadata', 10, 2 );
function jetpack_amp_post_template_metadata( $metadata, $post ) {
$metadata = wpcom_amp_add_blavatar( $metadata, $post );
return $metadata;
}
function wpcom_amp_add_blavatar( $metadata, $post ) {
if ( ! function_exists( 'blavatar_domain' ) ) {
return $metadata;
}
if ( ! isset( $metadata['publisher'] ) ) {
return $metadata;
}
if ( isset( $metadata['publisher']['logo'] ) ) {
return $metadata;
}
$size = 60;
$metadata['publisher']['logo'] = array(
'@type' => 'ImageObject',
'url' => blavatar_url( blavatar_domain( site_url() ), 'img', $size, staticize_subdomain( 'https://wordpress.com/i/emails/blavatar.png' ) ),
'width' => $size,
'height' => $size,
);
return $metadata;
}
add_action( 'amp_extract_image_dimensions_callbacks_registered', 'wpcom_amp_extract_image_dimensions_add_custom_callbacks' );
function wpcom_amp_extract_image_dimensions_add_custom_callbacks() {
// If images are being served from Photon or WP.com files, try extracting the size using querystring.
add_action( 'amp_extract_image_dimensions', 'wpcom_amp_extract_image_dimensions_from_querystring', 9, 2 ); // Hook in before the default extractors
// Uses a special wpcom lib (wpcom_getimagesize) to extract dimensions as a last resort if we weren't able to figure them out.
add_action( 'amp_extract_image_dimensions', 'wpcom_amp_extract_image_dimensions_from_getimagesize', 99, 2 ); // Our last resort, so run late
// This doesn't work well on WP.com and doesn't scale well for VIP sites (see https://github.com/Automattic/amp-wp/issues/207)
remove_filter( 'amp_extract_image_dimensions', array( 'AMP_Image_Dimension_Extractor', 'extract_from_attachment_metadata' ) );
// The wpcom override obviates this one, so take it out.
remove_filter( 'amp_extract_image_dimensions', array( 'AMP_Image_Dimension_Extractor', 'extract_by_downloading_image' ), 999, 2 );
}
function wpcom_amp_extract_image_dimensions_from_querystring( $dimensions, $url ) {
if ( is_array( $dimensions ) ) {
return $dimensions;
}
$host = parse_url( $url, PHP_URL_HOST );
if ( ! wp_endswith( $host, '.wp.com' ) || ! wp_endswith( $host, '.files.wordpress.com' ) ) {
return false;
}
$query = parse_url( $url, PHP_URL_QUERY );
$w = isset( $query['w'] ) ? absint( $query['w'] ) : false;
$h = isset( $query['h'] ) ? absint( $query['h'] ) : false;
if ( false !== $w && false !== $h ) {
return array( $w, $h );
}
return false;
}
function wpcom_amp_extract_image_dimensions_from_getimagesize( $dimensions, $url ) {
if ( is_array( $dimensions ) ) {
return $dimensions;
}
if ( ! function_exists( 'require_lib' ) ) {
return false;
}
require_lib( 'wpcom/imagesize' );
$size = wpcom_getimagesize( $url );
if ( ! is_array( $size ) ) {
return false;
}
return array( $size[0], $size[1] );
}