web-dev-qa-db-fra.com

Récupère wp_get_attachment_url en dehors de la boucle

Je dois obtenir l'image sélectionnée en dehors de la boucle. Cela me permet d'avoir une image d'arrière-plan plein écran différente pour chaque page, définie par l'image sélectionnée.

Après quelques recherches, j'ai pu sortir le post-ID de la boucle.

C'est ce que j'ai

$page_object = get_queried_object();
$page_id     = get_queried_object_id();
$bkgdImg = wp_get_attachment_url( $page_id );
if (!empty($bkgdImg)) {
    $backgroundImg = $bkgdImg;
}
else {
    $defaultbackground = . get_template_directory_uri() . "/images/default-background.jpg";
    $backgroundImg = $defaultBackground;
}

echo $backgroundImg;

Merci!

1
Alexnl

si le résultat recherché est une impression de l'URL, comme dans votre exemple, cela devrait alors fonctionner:

$page_id = get_queried_object_id();
if ( has_post_thumbnail( $page_id ) ) :
    $image_array = wp_get_attachment_image_src( get_post_thumbnail_id( $page_id ), 'optional-size' );
    $image = $image_array[0];
else :
    $image = get_template_directory_uri() . '/images/default-background.jpg';
endif;
echo $image;
6
windyjonas

Vous avez quelques erreurs de syntaxe, mais dans votre question, vous dites que ...

Cela me permet d'avoir une image d'arrière-plan plein écran différente pour chaque page, définie par l'image sélectionnée.

wp_get_attachment_url prend l'identifiant de pièce jointe réel, pas l'identifiant de page auquel l'image sélectionnée est attachée. Je suppose donc que la question est "Pourquoi ne reçois-je pas l'URL de l'image que j'attends?"

Ce dont vous avez besoin est d'utiliser get_post_thumbnail_id et de le transmettre à wp_get_attacment_url...

$bkgdImg = wp_get_attachment_url(get_post_thumbnail_id( $page_id ));

... éventuellement avec un argument second pour spécifier size .

J'espère que j'ai bien deviné :)

1
s_ha_dum

Cela a fonctionné et m'a donné l'URL de l'image:

$page_id = get_queried_object_id();
$post_thumbnail_id = get_post_thumbnail_id( $page_id );
$bkgdImg = wp_get_attachment_url( $post_thumbnail_id );
echo $bkgdImg;

Merci pour toute votre aide, cela m'a mis dans la bonne direction.

1
Alexnl

Ajouter un support de thème pour la vignette add_theme_support('post-thumbnails');

Ensuite, écrivez le code ci-dessous sur votre page d'archive. Cela fonctionne avant votre boucle WordPress

$thumb_id = get_post_thumbnail_id();
$thumb_url_array = wp_get_attachment_image_src($thumb_id, 'thumbnail-size', true);
$thumb_url = $thumb_url_array[0];
echo $thumb_url;
1
Nurealam Sabbir