web-dev-qa-db-fra.com

Comment obtenir l'ID de pièce jointe de l'image d'arrière-plan?

Je cherche un moyen d'obtenir l'ID de background_image lorsque j'utilise des en-têtes personnalisés?

Je me suis fatigué en utilisant url_to_postid comme ceci:

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

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

J'ai eu une valeur nulle pour les deux, ce que j'ai compris parce que get_header_image() et get_theme_mod('header-image') retournent l'URL sous la forme example.com/wp-content/uploads ... mais url_to_postid a besoin, c'est example.com/?attachment_id=#.

J'ai aussi pensé à get_theme_mods(); mais cela ne renvoie que l'URL long de l'image d'arrière-plan. Pas l'URL plus courte ou l'ID. Cependant, cela donne l'identifiant pour l'image d'en-tête, grrr.

Qu'est-ce que j'oublie ici?

Pour mémoire, je le fais pour obtenir l'image d'arrière-plan avec wp_get_attachment_image_src() dans une feuille de style dynamique et utiliser l'argument $ size, avec certaines tailles personnalisées pour renvoyer une taille différente en fonction de la taille de l'écran. De cette façon, je peux créer des arrière-plans en plein écran sans avoir à charger et à réduire une image volumineuse pour un écran de téléphone. Des solutions alternatives à mon problème actuel sont plus que bienvenues.

4
JPollock

Requête pour les clés de méta de publication _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];
}
1
fuxia