¿Cómo obtener el ID de adjunto de la imagen de fondo?

4

¿Estoy buscando una forma de obtener el ID de background_image cuando estoy usando encabezados personalizados?

Me cansé de usar url_to_postid así:

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

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

Obtuve un valor nulo para ambos, lo que me di cuenta es que tanto get_header_image() como get_theme_mod('header-image') devuelven la url en la forma de example.com/wp-content/uploads ... pero lo que url_to_postid necesita es example.com/?attachment_id=#.

También pensé en get_theme_mods(); pero solo devuelve la url larga para la imagen de fondo. No es la url más corta o la identificación. Sin embargo, da la identificación de la imagen del encabezado, grrr.

¿Qué me estoy perdiendo aquí?

Para el registro, estoy haciendo esto para obtener la imagen de fondo con wp_get_attachment_image_src() en una hoja de estilo dinámica y usar el tamaño $ arg, con algunos tamaños personalizados para devolver un tamaño diferente según el tamaño de la pantalla. De esa manera puedo hacer fondos de pantalla completa sin tener que cargar y escalar una imagen masiva para la pantalla de un teléfono. Soluciones alternativas a mi problema real son más que bienvenidas.

    
pregunta JPollock 03.05.2013 - 07:49

1 respuesta

1

Consulta para las claves de metadatos de publicación _wp_attachment_is_custom_background o _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];
}
    
respondido por el fuxia 03.05.2013 - 15:34

Lea otras preguntas en las etiquetas