Como obter o ID do anexo da imagem de fundo?

4

Estou procurando uma maneira de obter o ID do background_image quando estou usando cabeçalhos personalizados?

Estou cansado de usar url_to_postid assim:

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

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

Eu obtive um valor nulo para ambos, o que percebi é que ambos get_header_image() e get_theme_mod('header-image') retornam a URL na forma de example.com/wp-content/uploads ... mas o que url_to_postid precisa é example.com/?attachment_id = #.

Também pensei em get_theme_mods(); , mas ele retorna apenas a URL longa para a imagem de plano de fundo. Não o URL mais curto ou o ID. Ele dá o id para a imagem do cabeçalho, grrr.

O que estou perdendo aqui?

Para o registro, estou fazendo isso para obter a imagem de fundo com wp_get_attachment_image_src() em uma folha de estilo dinâmica e usar o argumento $ size, com alguns tamanhos personalizados para retornar um tamanho diferente, dependendo do tamanho da tela. Dessa forma, posso fazer planos de fundo em tela cheia sem ter que carregar e reduzir alguma imagem em massa para a tela de um telefone. Soluções alternativas para o meu problema atual são mais que bem-vindas.

    
por JPollock 03.05.2013 / 07:49

1 resposta

1

Consulta para as chaves post meta _wp_attachment_is_custom_background ou _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];
}
    
por fuxia 03.05.2013 / 15:34