it-swarm.com.de

Senden Sie Anhänge vom benutzerdefinierten Beitragstyp zurück

Ich bin ein ziemlich neuer WP Entwickler. Ich versuche, mit meinem portfolio.php alle Bilder anzuzeigen, die meinem benutzerdefinierten Beitragstyp "Portfolio" angehängt sind, und sie dann in einem Mauerwerkformat anzuzeigen. Ich habe es geschafft, dass sie ohne die $post->post_type-Abfrage angezeigt werden, aber nicht viel Erfolg beim Versuch, WP auf das Abrufen von Bildern zu beschränken, die an meinen benutzerdefinierten Beitragstyp angehängt sind. Jede Hilfe wird sehr geschätzt, und vielen Dank im Voraus!

    <?php get_header(); ?>
    <div id="portfolio-wrapper">
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php if ( $post->post_type == 'portfolio'  ) {
    $attachments = get_posts( array (
        'post_type' => 'attachment',
        'numberposts' => -1,
        'post_parent' => $post->ID
    ) );

     if ( $attachments ) {
foreach ( $attachments as $attachment ) {
    $imgurl = wp_get_attachment_url ($attachment->ID);
            echo '<div class="portfolio-item">';
            echo '<a href="'.$imgurl.'" rel="lightbox[portfolio-home]"><img class="portfolio" src="'.$imgurl.'"></a>';
            echo '</div>';
        }

    }
}
    ?>
    </div>
    <?php endwhile; endif; ?>
    <?php get_footer(); ?>

Wie gewünscht meine Lösung. Nicht sehr elegant, aber es funktioniert:

    $query = new WP_Query( array( 'post_type' => 'portfolio', 'posts_per_page' => -1 ) );
    if( $query->have_posts() ){
        while($query->have_posts()){
            $query->the_post();
            $image_query = new WP_Query( array( 'post_type' => 'attachment', 'post_status'         => 'inherit', 'post_mime_type' => 'image', 'posts_per_page' => -1, 'post_parent' => get_the_ID(), 'order' => 'DESC' ) );
    while( $image_query->have_posts() ) {
        $image_query->the_post();
        $imgurl = wp_get_attachment_url( get_the_ID() );
        echo '<div class="portfolio-item">';
        echo '<a href="'.$imgurl.'" rel="lightbox[portfolio-home]"><img class="portfolio" src="'.$imgurl.'"></a>';
        echo '</div>';
    }
}

}

2
natnai

Ihre Lösung (die in der Frage falsch bearbeitet wurde) sollte funktionsfähig sein, Sie sollten jedoch in der Lage sein, dasselbe mit weniger Abfragen zu erreichen.

  1. Ziehen Sie Ihr Portfolio IDs-- beachten Sie das Argument fields.
  2. Ziehen Sie dann Ihre Anhänge mit diesen IDs als übergeordnetem Beitrag.
  3. Dann durchlaufen Sie nur das eine Bildarray.

Das klappt auf zwei primäre Abfragen. Nämlich:

$query = new WP_Query( 
  array( 
    'post_type' => 'portfolio', 
    'posts_per_page' => -1,
    'fields' => 'ids'
  ) 
);
$image_query = new WP_Query( 
  array( 
    'post_type' => 'attachment', 
    'post_status' => 'inherit', 
    'post_mime_type' => 'image', 
    'posts_per_page' => -1, 
    'post_parent__in' => $query->posts, 
    'order' => 'DESC' 
  ) 
);

if( $image_query->have_posts() ){
  while( $image_query->have_posts() ) {
      $image_query->the_post();
      $imgurl = wp_get_attachment_url( get_the_ID() );
      echo '<div class="portfolio-item">';
      echo '<a href="'.$imgurl.'" rel="lightbox[portfolio-home]"><img class="portfolio" src="'.$imgurl.'"></a>';
      echo '</div>';
  }
}

Die Art und Weise, wie Sie dies tun, würde eine Abfrage für die portfolio Beiträge sowie eine weitere Bildabfrage für jedes portfolio Ergebnis bedeuten. Das kann je nach Größe Ihrer Datenbank Dutzende, Hunderte oder sogar mehr Abfragen bedeuten.

2
s_ha_dum