PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 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 / jetpack_vendor / automattic / jetpack-post-list / src / class-post-thumbnail.php
jetpack / jetpack_vendor / automattic / jetpack-post-list / src Last commit date
class-post-list.php 4 weeks ago class-post-thumbnail.php 3 years ago rtl.css 9 months ago style.css 9 months ago
class-post-thumbnail.php
113 lines
1 <?php
2 /**
3 * This file contains the Post_Thumbnail class used for finding a suitable thumbnail for a post.
4 *
5 * @package automattic/jetpack-post-list
6 */
7
8 namespace Automattic\Jetpack\Post_List;
9
10 /**
11 * The Post_Thumbnail class contains methods to find and return a suitable thumbnail for a post.
12 */
13 class Post_Thumbnail {
14 /**
15 * Returns the featured image thumbnail or if no featured image is set, return the first image in the post. If
16 * neither exists returns the image array with null values.
17 *
18 * @param object $post The current post.
19 * @return array|null The thumbnail image id and URLs
20 */
21 public static function get_post_thumbnail( $post ) {
22 $image_id = null;
23 $image_url = null;
24 $image_alt = null;
25 $image_thumb = false;
26
27 $post_id = $post->ID;
28
29 // If a featured image exists for the post, use that thumbnail.
30 if ( has_post_thumbnail( $post_id ) ) {
31 $image_id = get_post_thumbnail_id( $post_id );
32 $image_url = get_the_post_thumbnail_url( $post_id );
33 $image_thumb = get_the_post_thumbnail_url( $post_id, array( 50, 50 ) );
34 $image_alt = get_post_meta( $image_id, '_wp_attachment_image_alt', true );
35 } else {
36 // If a featured image does not exist look for the first "media library" hosted image on the post.
37 $attachment_id = self::get_first_image_id_from_post_content( $post->post_content );
38
39 if ( null !== $attachment_id ) {
40 $image_id = $attachment_id;
41 $image_url = wp_get_attachment_image_url( $attachment_id, 'full-size' );
42 $image_thumb = wp_get_attachment_image_url( $attachment_id, array( 50, 50 ) );
43 $image_alt = get_post_meta( $attachment_id, '_wp_attachment_image_alt', true );
44 }
45 }
46
47 // If no thumbnail is found return null.
48 if ( false === $image_thumb ) {
49 return null;
50 }
51
52 // Escape values just in case.
53 return array(
54 'id' => esc_attr( $image_id ),
55 'url' => esc_url( $image_url ),
56 'thumb' => esc_url( $image_thumb ),
57 'alt' => esc_attr( $image_alt ),
58 );
59 }
60
61 /**
62 * Looks for the first image in the post content containing a class value of 'wp-image-{$attachment_id}' and
63 * returns the $attachment_id from that class value.
64 *
65 * @param string $post_content The current post's HTML content.
66 * @return int The image attachment id.
67 */
68 public static function get_first_image_id_from_post_content( $post_content ) {
69 // If $post_content does not contain a value of substance, return null right away and avoid trying to parse it.
70 if ( empty( $post_content ) ) {
71 return null;
72 }
73
74 $attachment_id = null;
75 $dom = new \DOMDocument();
76
77 // libxml_use_internal_errors(true) silences PHP warnings and errors from malformed HTML in loadHTML().
78 // you can consult libxml_get_last_error() or libxml_get_errors() to check for errors if needed.
79 libxml_use_internal_errors( true );
80 $dom->loadHTML( $post_content );
81
82 // Media library images have a class attribute value containing 'wp-image-{$attachment_id}'.
83 // Use DomXPath to parse the post content and get the first img tag containing 'wp-image-' as a class value.
84 $class_name = 'wp-image-';
85 $dom_x_path = new \DomXPath( $dom );
86 $nodes = $dom_x_path->query( "//img[contains(@class, '$class_name')]/@class" );
87
88 if ( $nodes->length > 0 ) {
89 // Get the class attribute value of the 1st image node (aka index 0).
90 $class_value = $nodes[0]->value;
91
92 // Ignore all class attribute values except 'wp-image{$attachment_id}'.
93 // Regex english translation: Look for a word \b, that does not start or end with a hyphen (?!-), that
94 // starts with 'wp-image-', and ends with a number of any length \d+.
95 $class_name_found = preg_match( '/\b(?!-)wp-image-\d+(?!-)\b/', $class_value, $class_value );
96
97 if ( $class_name_found ) {
98 // Get the $attachment_id from the end of the class name value.
99 $attachment_id = str_replace( $class_name, '', $class_value[0] );
100
101 // If the ID we found is numeric, cast it as an int. Else, make it null.
102 if ( is_numeric( $attachment_id ) ) {
103 $attachment_id = (int) $attachment_id;
104 } else {
105 $attachment_id = null;
106 }
107 }
108 }
109
110 return $attachment_id;
111 }
112 }
113