私はかなり新しい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>';
}
}
}
あなたの解決策(間違って質問に編集されたもの)は実行可能であるべきですが、より少ないクエリで同じことを達成できるはずです。
ID
s-- fields
引数に注意してください。ID
を親投稿としてあなたの添付ファイルを引っ張ります。それは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
結果に対する別の画像問い合わせを意味するでしょう。データベースのサイズによっては、数十、数百、さらにはそれ以上のクエリが発生する可能性があります。