web-dev-qa-db-de.com

anhänge der übergeordneten Seite abfragen, wenn die Anhänge der aktuellen Seite kleiner sind als ...

Ich verwende WPQuery und get_children($query_images_args), um Anhänge von der aktuellen Seite abzufragen. Wenn der aktuellen Seite keine Anhänge zugewiesen sind, werden die Bilder der übergeordneten Seite abgefragt.

Das funktioniert so, wie ich es will, aber es gibt ein kleines Extra, das ich anstrebe. Ich habe hier im Forum bereits eine ähnliche Frage (mit demselben Codebeispiel) gestellt. https://wordpress.stackexchange.com/questions/62624/only-get-attachments-that-are-assoziated-with-a-gallery Allerdings In dieser Frage frage ich nach einem anderen Ansatz, um dasselbe Problem anzugehen.

$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');
    }

Ich frage die Anhangsbilder der aktuellen Seite ab. Wenn der aktuellen Seite keine Bilder zugewiesen sind, frage ich die Bilder der übergeordneten Seite ab. Außerdem mache ich ein zusätzliches Filter-Ding nur für große Bilder.

Ich frage mich jedoch, ob es möglich ist, die Bilder der übergeordneten Seite abzufragen, wenn die aktuelle Seite nur "kleine" Bilder enthält.

Im Grunde möchte ich nur "große" Bilder des aktuellen Posts erhalten, wenn dieser Bilder enthält, und nur "große" Bilder der übergeordneten Seite, wenn der aktuelle Post keine Bilder enthält.

Irgendwelche Ideen, wie das geht!

2
mathiregister

Ich bin mir nicht ganz sicher, wie Sie definieren, ob die aktuelle Seite nur "kleine" Bilder enthält. Ich vermute jedoch, dass die Antwort in der Funktion wp_get_attachment_image_src richtig ist, die nicht nur die Bild-URL, sondern auch die Breite und Höhe zurückgibt.

Angenommen, Sie haben sich nur für Bilder interessiert, die mehr als 300 Pixel breit sind. Fügen Sie dies zunächst zu Ihrer functions.php-Datei hinzu:

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;

}

Dann können Sie anstelle des obigen Codes Folgendes hinzufügen:

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