123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- <?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.
- */
- public function get_images_from_content( $content ) {
- if ( ! is_string( $content ) ) {
- return [];
- }
- $content_images = $this->get_img_tags_from_content( $content );
- $images = array_map( [ $this, 'get_img_tag_source' ], $content_images );
- $images = array_filter( $images );
- $images = array_unique( $images );
- $images = array_values( $images ); // Reset the array keys.
- 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 [];
- }
- preg_match_all( '`<img [^>]+>`', $content, $matches );
- if ( isset( $matches[0] ) ) {
- return $matches[0];
- }
- return [];
- }
- /**
- * 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' );
- }
- }
|