/**
 * Add SRCSET to non-content images
 * Make images uploaded in Customizer or Theme Options,
 * that don't pass through the WP 4.4 filter responsive
 *
 * @package Inti
 * @since 1.0.0
 * @license GNU General Public License v2 or later (http://www.gnu.org/licenses/gpl-2.0.html)
 */
function inti_get_srcset_image($url, $alt)
{
    $attachment_id = inti_get_attachment_id($url);
    $img_html = '';
    $img_html .= '<img src="' . $url . '" alt="' . $alt . '">';
    if ($url == "") {
        return "";
    }
    if ($attachment_id == 0) {
        // D'oh - Just return the non-responsive URL
        return $img_html;
    } else {
        if (function_exists('wp_image_add_srcset_and_sizes')) {
            $final_image = wp_image_add_srcset_and_sizes($img_html, wp_get_attachment_metadata($attachment_id, false), $attachment_id);
            return $final_image;
        } else {
            return $img_html;
        }
    }
}
Esempio n. 2
0
/**
 * Filters 'img' elements in post content to add 'srcset' and 'sizes' attributes.
 *
 * @since 4.4.0
 *
 * @see wp_image_add_srcset_and_sizes()
 *
 * @param string $content The raw post content to be filtered.
 * @return string Converted content with 'srcset' and 'sizes' attributes added to images.
 */
function wp_make_content_images_responsive($content)
{
    if (!preg_match_all('/<img [^>]+>/', $content, $matches)) {
        return $content;
    }
    $selected_images = $attachment_ids = array();
    foreach ($matches[0] as $image) {
        if (false === strpos($image, ' srcset=') && preg_match('/wp-image-([0-9]+)/i', $image, $class_id) && ($attachment_id = absint($class_id[1]))) {
            /*
             * If exactly the same image tag is used more than once, overwrite it.
             * All identical tags will be replaced later with 'str_replace()'.
             */
            $selected_images[$image] = $attachment_id;
            // Overwrite the ID when the same image is included more than once.
            $attachment_ids[$attachment_id] = true;
        }
    }
    if (count($attachment_ids) > 1) {
        /*
         * Warm object cache for use with 'get_post_meta()'.
         *
         * To avoid making a database call for each image, a single query
         * warms the object cache with the meta information for all images.
         */
        update_meta_cache('post', array_keys($attachment_ids));
    }
    foreach ($selected_images as $image => $attachment_id) {
        $image_meta = get_post_meta($attachment_id, '_wp_attachment_metadata', true);
        $content = str_replace($image, wp_image_add_srcset_and_sizes($image, $image_meta, $attachment_id), $content);
    }
    return $content;
}