PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 2.9.6
Jetpack – WP Security, Backup, Speed, & Growth v2.9.6
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 / functions.opengraph.php
jetpack Last commit date
3rd-party 10 years ago _inc 10 years ago languages 10 years ago modules 5 years ago views 10 years ago .svnignore 10 years ago class.jetpack-bbpress-json-api-compat.php 10 years ago class.jetpack-cli.php 10 years ago class.jetpack-client-server.php 10 years ago class.jetpack-client.php 10 years ago class.jetpack-data.php 10 years ago class.jetpack-debugger.php 10 years ago class.jetpack-error.php 10 years ago class.jetpack-heartbeat.php 10 years ago class.jetpack-ixr-client.php 10 years ago class.jetpack-network-sites-list-table.php 10 years ago class.jetpack-network.php 10 years ago class.jetpack-options.php 10 years ago class.jetpack-post-images.php 10 years ago class.jetpack-signature.php 10 years ago class.jetpack-sync.php 10 years ago class.jetpack-user-agent.php 10 years ago class.jetpack-xmlrpc-server.php 10 years ago class.jetpack.php 10 years ago class.json-api-endpoints.php 3 years ago class.json-api.php 10 years ago class.media-extractor.php 10 years ago class.media-summary.php 10 years ago class.photon.php 10 years ago composer.json 10 years ago functions.compat.php 10 years ago functions.gallery.php 10 years ago functions.opengraph.php 10 years ago functions.photon.php 10 years ago functions.twitter-cards.php 10 years ago jetpack.php 3 years ago locales.php 10 years ago readme.txt 3 years ago require-lib.php 10 years ago uninstall.php 10 years ago
functions.opengraph.php
234 lines
1 <?php
2 /**
3 * Open Graph Tags
4 *
5 * Add Open Graph tags so that Facebook (and any other service that supports them)
6 * can crawl the site better and we provide a better sharing experience.
7 *
8 * @link http://ogp.me/
9 * @link http://developers.facebook.com/docs/opengraph/
10 */
11 add_action( 'wp_head', 'jetpack_og_tags' );
12
13 function jetpack_og_tags() {
14 if ( false === apply_filters( 'jetpack_enable_opengraph', true ) ) {
15 _deprecated_function( 'jetpack_enable_opengraph', '2.0.3', 'jetpack_enable_open_graph' );
16 return;
17 }
18
19 // Disable the widont filter on WP.com to avoid stray &nbsps
20 $disable_widont = remove_filter( 'the_title', 'widont' );
21
22 $og_output = "\n<!-- Jetpack Open Graph Tags -->\n";
23 $tags = array();
24
25 $image_width = absint( apply_filters( 'jetpack_open_graph_image_width', 200 ) );
26 $image_height = absint( apply_filters( 'jetpack_open_graph_image_height', 200 ) );
27 $description_length = 197;
28
29 if ( is_home() || is_front_page() ) {
30 $site_type = get_option( 'open_graph_protocol_site_type' );
31 $tags['og:type'] = ! empty( $site_type ) ? $site_type : 'website';
32 $tags['og:title'] = get_bloginfo( 'name' );
33 $tags['og:description'] = get_bloginfo( 'description' );
34
35 $front_page_id = get_option( 'page_for_posts' );
36 if ( $front_page_id && is_home() )
37 $tags['og:url'] = get_permalink( $front_page_id );
38 else
39 $tags['og:url'] = home_url( '/' );
40
41 // Associate a blog's root path with one or more Facebook accounts
42 $facebook_admins = get_option( 'facebook_admins' );
43 if ( ! empty( $facebook_admins ) )
44 $tags['fb:admins'] = $facebook_admins;
45
46 } else if ( is_author() ) {
47 $tags['og:type'] = 'profile';
48
49 $author = get_queried_object();
50
51 $tags['og:title'] = $author->display_name;
52 $tags['og:url'] = get_author_posts_url( $author->ID );
53 $tags['og:description'] = $author->description;
54 $tags['profile:first_name'] = get_the_author_meta( 'first_name', $author->ID );
55 $tags['profile:last_name'] = get_the_author_meta( 'last_name', $author->ID );
56
57 } else if ( is_singular() ) {
58 global $post;
59 $data = $post; // so that we don't accidentally explode the global
60
61 $tags['og:type'] = 'article';
62 $tags['og:title'] = empty( $data->post_title ) ? ' ' : wp_kses( $data->post_title, array() ) ;
63 $tags['og:url'] = get_permalink( $data->ID );
64 if ( !post_password_required() )
65 $tags['og:description'] = ! empty( $data->post_excerpt ) ? preg_replace( '@https?://[\S]+@', '', strip_shortcodes( wp_kses( $data->post_excerpt, array() ) ) ): wp_trim_words( preg_replace( '@https?://[\S]+@', '', strip_shortcodes( wp_kses( $data->post_content, array() ) ) ) );
66 $tags['og:description'] = empty( $tags['og:description'] ) ? ' ' : $tags['og:description'];
67 $tags['article:published_time'] = date( 'c', strtotime( $data->post_date_gmt ) );
68 $tags['article:modified_time'] = date( 'c', strtotime( $data->post_modified_gmt ) );
69 if ( post_type_supports( get_post_type( $data ), 'author' ) && isset( $data->post_author ) )
70 $tags['article:author'] = get_author_posts_url( $data->post_author );
71 }
72
73 // Allow plugins to inject additional template-specific open graph tags
74 $tags = apply_filters( 'jetpack_open_graph_base_tags', $tags, compact( 'image_width', 'image_height' ) );
75
76 // Re-enable widont if we had disabled it
77 if ( $disable_widont )
78 add_filter( 'the_title', 'widont' );
79
80 if ( empty( $tags ) && apply_filters( 'jetpack_open_graph_return_if_empty', true ) )
81 return;
82
83 $tags['og:site_name'] = get_bloginfo( 'name' );
84
85 if ( !post_password_required() )
86 $tags['og:image'] = jetpack_og_get_image( $image_width, $image_height );
87
88 // Facebook whines if you give it an empty title
89 if ( empty( $tags['og:title'] ) )
90 $tags['og:title'] = __( '(no title)', 'jetpack' );
91
92 // Shorten the description if it's too long
93 if ( isset( $tags['og:description'] ) ) {
94 $tags['og:description'] = strlen( $tags['og:description'] ) > $description_length ? mb_substr( $tags['og:description'], 0, $description_length ) . '...' : $tags['og:description'];
95 }
96
97 // Add any additional tags here, or modify what we've come up with
98 $tags = apply_filters( 'jetpack_open_graph_tags', $tags, compact( 'image_width', 'image_height' ) );
99
100 // secure_urls need to go right after each og:image to work properly so we will abstract them here
101 $secure = $tags['og:image:secure_url'] = ( empty( $tags['og:image:secure_url'] ) ) ? '' : $tags['og:image:secure_url'];
102 unset( $tags['og:image:secure_url'] );
103 $secure_image_num = 0;
104
105 foreach ( (array) $tags as $tag_property => $tag_content ) {
106 // to accomodate multiple images
107 $tag_content = (array) $tag_content;
108 $tag_content = array_unique( $tag_content );
109
110 foreach ( $tag_content as $tag_content_single ) {
111 if ( empty( $tag_content_single ) )
112 continue; // Don't ever output empty tags
113 $og_tag = sprintf( '<meta property="%s" content="%s" />', esc_attr( $tag_property ), esc_attr( $tag_content_single ) );
114 $og_output .= apply_filters( 'jetpack_open_graph_output', $og_tag );
115 $og_output .= "\n";
116
117 if ( 'og:image' == $tag_property ) {
118 if ( is_array( $secure ) && !empty( $secure[$secure_image_num] ) ) {
119 $og_tag = sprintf( '<meta property="og:image:secure_url" content="%s" />', esc_url( $secure[ $secure_image_num ] ) );
120 $og_output .= apply_filters( 'jetpack_open_graph_output', $og_tag );
121 $og_output .= "\n";
122 } else if ( !is_array( $secure ) && !empty( $secure ) ) {
123 $og_tag = sprintf( '<meta property="og:image:secure_url" content="%s" />', esc_url( $secure ) );
124 $og_output .= apply_filters( 'jetpack_open_graph_output', $og_tag );
125 $og_output .= "\n";
126 }
127 $secure_image_num++;
128 }
129 }
130 }
131 echo $og_output;
132 }
133
134 function jetpack_og_get_image( $width = 200, $height = 200, $max_images = 4 ) { // Facebook requires thumbnails to be a minimum of 200x200
135 $image = '';
136
137 if ( is_singular() && !is_home() && !is_front_page() ) {
138 global $post;
139 $image = '';
140
141 // Attempt to find something good for this post using our generalized PostImages code
142 if ( class_exists( 'Jetpack_PostImages' ) ) {
143 $post_images = Jetpack_PostImages::get_images( $post->ID, array( 'width' => $width, 'height' => $height ) );
144 if ( $post_images && !is_wp_error( $post_images ) ) {
145 $image = array();
146 foreach ( (array) $post_images as $post_image ) {
147 $image[] = $post_image['src'];
148 }
149 }
150 }
151 } else if ( is_author() ) {
152 $author = get_queried_object();
153 if ( function_exists( 'get_avatar_url' ) ) {
154 $avatar = get_avatar_url( $author->user_email, $width );
155
156 if ( ! empty( $avatar ) ) {
157 if ( is_array( $avatar ) )
158 $image = $avatar[0];
159 else
160 $image = $avatar;
161 }
162 }
163 else {
164 $has_filter = has_filter( 'pre_option_show_avatars', '__return_true' );
165 if ( !$has_filter ) {
166 add_filter( 'pre_option_show_avatars', '__return_true' );
167 }
168 $avatar = get_avatar( $author->user_email, $width );
169 if ( !$has_filter ) {
170 remove_filter( 'pre_option_show_avatars', '__return_true' );
171 }
172
173 if ( !empty( $avatar ) && !is_wp_error( $avatar ) ) {
174 if ( preg_match( '/src=["\']([^"\']+)["\']/', $avatar, $matches ) );
175 $image = wp_specialchars_decode( $matches[1], ENT_QUOTES );
176 }
177 }
178 }
179
180 if ( empty( $image ) )
181 $image = array();
182 else if ( !is_array( $image ) )
183 $image = array( $image );
184
185 // First fall back, blavatar
186 if ( empty( $image ) && function_exists( 'blavatar_domain' ) ) {
187 $blavatar_domain = blavatar_domain( site_url() );
188 if ( blavatar_exists( $blavatar_domain ) )
189 $image[] = blavatar_url( $blavatar_domain, 'img', $width );
190 }
191
192 // Second fall back, blank image
193 if ( empty( $image ) ) {
194 $image[] = "http://wordpress.com/i/blank.jpg";
195 }
196
197 return $image;
198 }
199
200 /**
201 * @param $email
202 * @param $width
203 * @return array|bool|mixed|string
204 */
205 function jetpack_og_get_image_gravatar( $email, $width ) {
206 $image = '';
207 if ( function_exists( 'get_avatar_url' ) ) {
208 $avatar = get_avatar_url($email, $width);
209 if ( ! empty( $avatar ) ) {
210 if ( is_array( $avatar ) )
211 $image = $avatar[0];
212 else
213 $image = $avatar;
214 }
215 } else {
216 $has_filter = has_filter( 'pre_option_show_avatars', '__return_true' );
217 if ( !$has_filter ) {
218 add_filter( 'pre_option_show_avatars', '__return_true' );
219 }
220 $avatar = get_avatar( $email, $width );
221
222 if ( !$has_filter ) {
223 remove_filter( 'pre_option_show_avatars', '__return_true' );
224 }
225
226 if ( !empty( $avatar ) && !is_wp_error( $avatar ) ) {
227 if ( preg_match( '/src=["\']([^"\']+)["\']/', $avatar, $matches ) )
228 $image = wp_specialchars_decode($matches[1], ENT_QUOTES);
229 }
230 }
231
232 return $image;
233 }
234