I have tried to apply filters to the_post_thumbnail() function using

apply_filters( 'post_thumbnail_html', $html, $post_id, $post_thumbnail_id, $size, $attr );

Here's the code I have come up with but doesn't seem to work completely

    function red_adjust_image_schema($html, $id, $caption, $title, $align, $url, $size, $alt) 
    $html = '<div class="image-container" itemprop="image">'. $html . '</div>';

    return $html;
add_filter('post_thumbnail_html', 'red_adjust_image_schema', 20, 8);

How can I add itemprop="image" to the actual image element so it registers properly? Right now it seem like I can only do a container and wrap around $html?



You've simply the wrong arguments (incl. the list of them).

$caption, $title, $align, $url, $alt

are too much in there.

And $attr is missing. Not that it matters how you name the vars (as long as they start with a character), but it's easier to read for later readers.

function wpse76536_image_schema( $html, $post_id, $post_thumbnail_id, $size, $attr ) 
    return "<div class='image-container' itemprop='image'>{$html}</div>";
add_filter( 'post_thumbnail_html', 'wpse76536_image_schema', 10, 5 );

You can just add a new attribute:

add_filter('wp_get_attachment_image_attributes', 'ipwp_img_attr', 10, 2);
    function ipwp_img_attr($attr) {
    $attr['itemprop'] = 'image';
    return $attr;

This way there will just be a new attribute, without the need to search and replace any code - See my previous version:

add_filter('post_thumbnail_html','mediaboxlv_image_itemprop',10,3 );
function mediaboxlv_image_itemprop($html, $post_id, $post_image_id){
    $html = str_replace('src',' itemprop="image" src',$html);
    return $html;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.