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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
<?php /** * WPSEO plugin file. * * @package WPSEO */
/** * WPSEO_Content_Images. */ class WPSEO_Content_Images {
/** * Retrieves images from the post content. * * @param int $post_id The post ID. * @param \WP_Post $post The post object. * * @return array An array of images found in this post. */ public function get_images( $post_id, $post = null ) { return $this->get_images_from_content( $this->get_post_content( $post_id, $post ) ); }
/** * Grabs the images from the content. * * @param string $content The post content string. * * @return array An array of image URLs. */ protected function get_images_from_content( $content ) { $content_images = $this->get_img_tags_from_content( $content ); $images = array_map( array( $this, 'get_img_tag_source' ), $content_images ); $images = array_filter( $images ); $images = array_unique( $images );
return $images; }
/** * Gets the image tags from a given content string. * * @param string $content The content to search for image tags. * * @return array An array of `<img>` tags. */ private function get_img_tags_from_content( $content ) { if ( strpos( $content, '<img' ) === false ) { return array(); }
preg_match_all( '`<img [^>]+>`', $content, $matches ); if ( isset( $matches[0] ) ) { return $matches[0]; }
return array(); }
/** * Retrieves the image URL from an image tag. * * @param string $image Image HTML element. * * @return string|bool The image URL on success, false on failure. */ private function get_img_tag_source( $image ) { preg_match( '`src=(["\'])(.*?)\1`', $image, $matches ); if ( isset( $matches[2] ) ) { return $matches[2]; } return false; }
/** * Retrieves the post content we want to work with. * * @param int $post_id The post ID. * @param WP_Post|array|null $post The post. * * @return string The content of the supplied post. */ private function get_post_content( $post_id, $post ) { if ( $post === null ) { $post = get_post( $post_id ); }
if ( $post === null ) { return ''; }
/** * Filter: 'wpseo_pre_analysis_post_content' - Allow filtering the content before analysis. * * @api string $post_content The Post content string. */ $content = apply_filters( 'wpseo_pre_analysis_post_content', $post->post_content, $post );
if ( ! is_string( $content ) ) { $content = ''; }
return $content; }
/* ********************* DEPRECATED METHODS ********************* */
/** * Removes the cached images on post save. * * @deprecated 7.7 * @codeCoverageIgnore * * @param int $post_id The post id to remove the images from. * * @return void */ public function clear_cached_images( $post_id ) { _deprecated_function( __METHOD__, '7.7.0' ); }
/** * Registers the hooks. * * @deprecated 9.6 * @codeCoverageIgnore * * @return void */ public function register_hooks() { _deprecated_function( __METHOD__, 'WPSEO 9.6' ); } }
|