web-dev-qa-db-fra.com

interroger les pièces jointes de la page parente si celles de la page en cours sont inférieures à…

J'utilise WPQuery et get_children($query_images_args) pour interroger les pièces jointes à partir de la page en cours. Si aucune pièce jointe n'est affectée à la page en cours, j'interroge les images de la page parente.

Cela fonctionne comme je le veux mais il y a un petit extra que je vise. J'ai déjà posé une question similaire (avec le même exemple de code) ici sur le forum. https://wordpress.stackexchange.com/questions/62624/only-get-attachments-that-are-associated-with-a-gallery Cependant Dans cette question, je demande une approche différente pour traiter le même problème.

$query_images_args = array(
        'post_type' => 'attachment',
        'post_mime_type' =>'image',
        'post_status' => 'inherit',
        'posts_per_page' => -1,
        'post_parent' => $post->ID
    );

    $attachments = get_children($query_images_args);

    if ( empty($attachments) ) {
        $query_images_args = array(
            'post_type' => 'attachment',
            'post_mime_type' =>'image',
            'post_status' => 'inherit',
            'posts_per_page' => -1,
            'post_parent' => $post->post_parent
        );
    }

    $query_images = new WP_Query( $query_images_args );
    $images = array();
    foreach ( $query_images->posts as $image) {
        $images[] = wp_get_attachment_image_src( $image->ID, 'large');
    }

J'interroge les images de pièce jointe de la page en cours et, si aucune image n'est affectée à la page en cours, j'interroge les images de la page parente. De plus, je fais un filtre supplémentaire pour les grandes images.

Cependant, je me demande s’il est possible d’interroger les images de la page parente si la page actuelle ne contient que de "petites" images.

Donc, en substance, j'aimerais uniquement obtenir de "grandes" images de la publication en cours si elle contient des images et obtenir uniquement des "grandes" images de la page parente si la publication en cours ne contient aucune image.

Des idées sur la façon de faire ça!

2
mathiregister

Je ne sais pas trop comment vous définissez si la page actuelle ne contient que de "petites" images. Mais je soupçonne que la réponse est exacte dans la fonction wp_get_attachment_image_src, qui renvoie non seulement l'URL de l'image, mais également la largeur et la hauteur.

Supposons que vous ne vous intéressiez qu'aux images de plus de 300 pixels de large. Tout d’abord, ajoutez ceci à votre fichier functions.php:

function return_my_big_images( $id ) {

    $query_images_args = array(
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'post_status' => 'inherit',
        'posts_per_page' => -1,
        'post_parent' => $id
    );

    $attachments = get_children( $query_images_args );

    $big_images = array();
    foreach( $attachments as $image ) {
        $image_src = wp_get_attachment_image_src( $image->ID, 'full' );
        if ( $image_src[1] > 300 ) // $image_src[1] is where pixel width is stored
            $big_images[] = $image_src[0]; // $image_src[0] is its url
    }

    return $big_images;

}

Ensuite, au lieu de votre code ci-dessus, vous pouvez ajouter ceci:

global $post;

// return all images bigger than 300px wide attached to current post
$big_images = return_my_big_images( $post->ID );

// if none, return images bigger than 300px wide attached to post parent
if ( empty( $big_images ) )
    $big_images = return_my_big_images( $post->post_parent );
4
SeventhSteel