Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I'm looking for a way to get the ID of the background_image when I am using custom headers?

I tired using url_to_postid like this:

$url = get_header_image()
$postid = url_to_postid( $url );

and $url = get_theme_mod('header-image') $postid = url_to_postid( $url );

I got a null value for both, which I realized is because both get_header_image() and get_theme_mod('header-image') return the url in the form of example.com/wp-content/uploads... but what url_to_postid needs is example.com/?attachment_id=#.

I also thought about get_theme_mods(); but it only returns the long url for background image. Not the shorter url or the ID. It does give the id for the header image though, grrr.

What am I missing here?

For the record I'm doing this so I can get the background image with wp_get_attachment_image_src() in a dynamic stylesheet and use the $size arg, with some custom sizes to return a different size depending on the screen size. That way I can do full screen backgrounds without having to load and scale down some massive image for a phone's screen. Alternative solutions to my actual problem are more than welcome.

share|improve this question
add comment

1 Answer

Query for post meta keys _wp_attachment_is_custom_background or _wp_attachment_is_custom_background:

function t5_bg_img_id()
{
    if ( ! $bg_img = get_background_image() )
        return FALSE;

    $query = array(
        'post_type'  => 'attachment',
        'fields'     => 'ids',
        'meta_query' => array (
            array (
                'key' => '_wp_attachment_is_custom_background',
                'value'   => get_option( 'stylesheet' ),
                'compare' => '==',
            ),
            array (
                'key' => '_wp_attachment_metadata',
                'value'   => basename( $bg_img ),
                'compare' => 'LIKE',
            )
        )
    );

    if ( array () === $bg_post = get_posts( $query ) )
        return FALSE;

    return $bg_post[0];
}
share|improve this answer
    
Thanks for your response. I tried this and it returned false, though I'm not sure if I follow how to implement it. I tried to echo $bg_post, just to see if I got a value, and I did not. –  JPollock May 8 '13 at 23:46
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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