web-dev-qa-db-ja.com

カスタム投稿タイプから添付ファイルを返す

私はかなり新しいWP開発者です。私のportfolio.phpに私のカスタム投稿タイプ 'portfolio'に添付されているすべての画像を表示させ、次にそれらを石積みの形式で表示させようとしています。私は$post->post_typeクエリなしでそれらを表示させることができましたが、WPを私のカスタム投稿タイプに添付された画像の取得に制限しようとするとあまり成功しませんでした。任意の助けは大いに感謝されます、そして事前に感謝します!

    <?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(); ?>

要求どおり、私の解決策。それほどエレガントではありませんが、うまくいきます。

    $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

あなたの解決策(間違って質問に編集されたもの)は実行可能であるべきですが、より少ないクエリで同じことを達成できるはずです。

  1. あなたのポートフォリオを引きますIDs-- fields引数に注意してください。
  2. それからそれらのIDを親投稿としてあなたの添付ファイルを引っ張ります。
  3. その後、1つの画像配列をループするだけです。

それは2つの主要な問い合わせにうまくいきます。目撃するには:

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

あなたがしているやり方はportfolio投稿に対する一つの問い合わせに加えてそれぞれのportfolio結果に対する別の画像問い合わせを意味するでしょう。データベースのサイズによっては、数十、数百、さらにはそれ以上のクエリが発生する可能性があります。

2
s_ha_dum