PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.9-a.1
Jetpack – WP Security, Backup, Speed, & Growth v15.9-a.1
15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / enhanced-open-graph.php
jetpack Last commit date
3rd-party 2 months ago _inc 3 weeks ago css 4 weeks ago extensions 3 weeks ago images 1 month ago jetpack_vendor 3 weeks ago json-endpoints 4 weeks ago modules 3 weeks ago sal 4 weeks ago src 4 weeks ago vendor 3 weeks ago views 1 month ago CHANGELOG.md 3 weeks ago LICENSE.txt 5 months ago SECURITY.md 2 years ago class-jetpack-connection-status.php 2 years ago class-jetpack-gallery-settings.php 6 months ago class-jetpack-newsletter-dashboard-widget.php 6 months ago class-jetpack-pre-connection-jitms.php 2 years ago class-jetpack-stats-dashboard-widget.php 3 months ago class-jetpack-xmlrpc-methods.php 6 months ago class.frame-nonce-preview.php 6 months ago class.jetpack-admin.php 1 month ago class.jetpack-autoupdate.php 6 months ago class.jetpack-cli.php 5 months ago class.jetpack-client-server.php 2 years ago class.jetpack-gutenberg.php 2 months ago class.jetpack-heartbeat.php 3 months ago class.jetpack-modules-list-table.php 6 months ago class.jetpack-network-sites-list-table.php 6 months ago class.jetpack-network.php 1 month ago class.jetpack-plan.php 2 years ago class.jetpack-post-images.php 2 months ago class.jetpack-twitter-cards.php 3 months ago class.jetpack-user-agent.php 2 years ago class.jetpack.php 3 weeks ago class.json-api-endpoints.php 1 month ago class.json-api.php 5 months ago class.photon.php 3 years ago composer.json 3 weeks ago enhanced-open-graph.php 3 months ago functions.compat.php 3 months ago functions.cookies.php 2 years ago functions.global.php 1 month ago functions.is-mobile.php 2 years ago functions.opengraph.php 2 months ago functions.photon.php 2 years ago jetpack.php 3 weeks ago json-api-config.php 3 years ago json-endpoints.php 2 years ago load-jetpack.php 2 months ago locales.php 6 months ago readme.txt 3 weeks ago unauth-file-upload.php 6 months ago uninstall.php 6 months ago wpml-config.xml 3 years ago
enhanced-open-graph.php
198 lines
1 <?php
2 /**
3 * Enhanced Open Graph for Jetpack.
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Post_Media\Images;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit( 0 );
12 }
13
14 if ( ! class_exists( 'Jetpack_Media_Summary' ) ) {
15 require_once JETPACK__PLUGIN_DIR . '_inc/lib/class.media-summary.php';
16 }
17
18 /**
19 * Better OG Image Tags for Image Post Formats
20 *
21 * @param array $tags Array of Open Graph tags.
22 */
23 function enhanced_og_image( $tags ) {
24 if ( ! is_singular() || post_password_required() ) {
25 return $tags;
26 }
27
28 global $post;
29
30 // Bail if we do not have info about the post.
31 if ( ! $post instanceof WP_Post ) {
32 return $tags;
33 }
34
35 // Always favor featured images.
36 if ( enhanced_og_has_featured_image( $post->ID ) ) {
37 return $tags;
38 }
39
40 $summary = Jetpack_Media_Summary::get(
41 $post->ID,
42 0,
43 array(
44 'include_excerpt' => false,
45 'include_count' => false,
46 )
47 );
48
49 if ( 'image' !== $summary['type'] ) {
50 return $tags;
51 }
52
53 $tags['og:image'] = $summary['image'];
54 $tags['og:image:secure_url'] = $summary['secure']['image'];
55
56 return $tags;
57 }
58 add_filter( 'jetpack_open_graph_tags', 'enhanced_og_image' );
59
60 /**
61 * Better OG Image Tags for Gallery Post Formats
62 *
63 * @param array $tags Array of Open Graph tags.
64 */
65 function enhanced_og_gallery( $tags ) {
66 if ( ! is_singular() || post_password_required() ) {
67 return $tags;
68 }
69
70 global $post;
71
72 // Bail if we do not have info about the post.
73 if ( ! $post instanceof WP_Post ) {
74 return $tags;
75 }
76
77 // Always favor featured images.
78 if ( enhanced_og_has_featured_image( $post->ID ) ) {
79 return $tags;
80 }
81
82 $summary = Jetpack_Media_Summary::get(
83 $post->ID,
84 0,
85 array(
86 'include_excerpt' => false,
87 'include_count' => false,
88 )
89 );
90
91 if ( 'gallery' !== $summary['type'] ) {
92 return $tags;
93 }
94
95 if ( ! isset( $summary['images'] ) || ! is_array( $summary['images'] ) || empty( $summary['images'] ) ) {
96 return $tags;
97 }
98
99 $images = array();
100 $secures = array();
101
102 foreach ( $summary['images'] as $i => $image ) {
103 $images[] = $image['url'];
104 $secures[] = $summary['secure']['images'][ $i ]['url'];
105 }
106
107 $tags['og:image'] = $images;
108 $tags['og:image:secure_url'] = $secures;
109
110 return $tags;
111 }
112 add_filter( 'jetpack_open_graph_tags', 'enhanced_og_gallery' );
113
114 /**
115 * Allows VideoPress, YouTube, and Vimeo videos to play inline on Facebook
116 *
117 * @param array $tags Array of Open Graph tags.
118 */
119 function enhanced_og_video( $tags ) {
120 if ( ! is_singular() || post_password_required() ) {
121 return $tags;
122 }
123
124 global $post;
125
126 // Bail if we do not have info about the post.
127 if ( ! $post instanceof WP_Post ) {
128 return $tags;
129 }
130
131 // Always favor featured images.
132 if ( enhanced_og_has_featured_image( $post->ID ) ) {
133 return $tags;
134 }
135
136 $summary = Jetpack_Media_Summary::get(
137 $post->ID,
138 0,
139 array(
140 'include_excerpt' => false,
141 'include_count' => false,
142 )
143 );
144
145 if ( 'video' !== $summary['type'] ) {
146 if ( $summary['count']['video'] > 0 && $summary['count']['image'] < 1 ) {
147 $tags['og:image'] = $summary['image'];
148 $tags['og:image:secure_url'] = $summary['secure']['image'];
149 }
150 return $tags;
151 }
152
153 $tags['og:image'] = $summary['image'];
154 $tags['og:image:secure_url'] = $summary['secure']['image'];
155
156 // This should be html by default for youtube/vimeo, since we're linking to HTML pages.
157 $tags['og:video:type'] = isset( $summary['video_type'] ) ? $summary['video_type'] : 'text/html';
158
159 $video_url = $summary['video'];
160 $secure_video_url = $summary['secure']['video'];
161
162 if ( preg_match( '/((youtube|vimeo)\.com|youtu.be)/', $video_url ) ) {
163 if ( strstr( $video_url, 'youtube' ) ) {
164 $id = jetpack_get_youtube_id( $video_url );
165 $video_url = 'http://www.youtube.com/embed/' . $id;
166 $secure_video_url = 'https://www.youtube.com/embed/' . $id;
167 } elseif ( strstr( $video_url, 'vimeo' ) ) {
168 preg_match( '|vimeo\.com/(\d+)/?$|i', $video_url, $match );
169 if ( isset( $match[1] ) ) {
170 $id = (int) $match[1];
171 $video_url = 'http://vimeo.com/moogaloop.swf?clip_id=' . $id;
172 $secure_video_url = 'https://vimeo.com/moogaloop.swf?clip_id=' . $id;
173 }
174 }
175 }
176
177 $tags['og:video'] = $video_url;
178 $tags['og:video:secure_url'] = $secure_video_url;
179
180 if ( empty( $post->post_title ) ) {
181 /* translators: %s is the name of the site */
182 $tags['og:title'] = sprintf( __( 'Video on %s', 'jetpack' ), get_option( 'blogname' ) );
183 }
184
185 return $tags;
186 }
187 add_filter( 'jetpack_open_graph_tags', 'enhanced_og_video' );
188
189 /**
190 * Check if a post has a suitable featured image.
191 *
192 * @param int $post_id The post ID to check.
193 * @return bool True if the post has a suitable featured image, false otherwise.
194 */
195 function enhanced_og_has_featured_image( $post_id ) {
196 return ! empty( Images::from_thumbnail( $post_id ) );
197 }
198