0

まず第一に、これは主にループ™に関する質問です。添付ファイルにも問題がありますが、役に立つと思われるスニペットがあちこちにあるので、それはどういうわけか二次的なものです。

わかりましたので、これは私がフロントページでやりたいことです:

  • カスタム投稿タイプ「ポートフォリオ」から 7 件の投稿を取得する
  • 最初のものでのみ、特定の添付ファイルを取得します(ファイル名、メディアマネージャーでの順序など、可能な方法で...最善の、よりクリーンな方法は何でも)
  • 他の 6 つについては、the_post_thumbnail() などを取得するだけです。

今、私はこれを持っています:

<?php
$args = array (
'post_type' => 'portfolio',
'order' => 'DESC',
'posts_per_page' => 7
);

$query = new WP_Query( $args );
$first_post = true; /* we will take the latest work first */
?>

<?php if ( $query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>

<?php
if ($first_post):
$first_post = false;
?>

    <div> /* This is the div for the first item */
            <?php /* let's take the first attachment */
            $args = array(
                'post_type' => 'attachment',
                'numberposts' => 1,
                'order' => 'DESC'
                );

            $attachments = get_posts( $args );
            if ( $attachments ) :
                foreach ( $attachments as $attachment ) :
                   echo wp_get_attachment_image( $attachment->ID, 'full' );
                endforeach;
            endif;
            ?>
        </div>
<?php else: ?>
    /* Do something with the other 6 posts and their post_thumbnail */
<?php endif ?>
<?php endwhile; ?>

そして今、質問のために:

  • 何よりもまず、添付ファイルを回復しようとするときに「numberposts」をすべて (-1) に設定すると、すべての「ポートフォリオ」投稿からすべての添付ファイルを取得します。現在の投稿 (the_post()) だけを操作するべきではありませんか? ここでループの概念がよくわかりません。これが主な質問です。

  • そのコードは、その投稿のメディア マネージャーの最初の場所に配置されていても、最初の添付ファイルを取得しません。

二次ループまたはネストされたループを使用する必要がありますか? 私はコーデックスや他のチュートリアルを読んで再読しましたが、それでも頭を包むことはできません.

どうもありがとう!

4

2 に答える 2

0

このコードを使用しました:

$attachments = get_posts( array(
            'post_type' => 'attachment',
            'posts_per_page' => -1,
            'post_parent' => $post->ID,
            'exclude'     => get_post_thumbnail_id()
        ) );

        if ( $attachments ) {
            foreach ( $attachments as $attachment ) {
                $class = "post-attachment mime-" . sanitize_title( $attachment->post_mime_type );
                $thumbimg = wp_get_attachment_link( $attachment->ID, 'thumbnail-size', true );
                echo $thumbimg;
            }

        }
于 2013-10-03T08:48:45.987 に答える
0

ユーザー Shakti Patel が答えの鍵を教えてくれましたが、ループに関する私の質問には実際には答えていませんでした。

問題はにありましたget_posts。実際には、ループの現在のステップを考慮せずに、メインのクエリに対して並列クエリを実行します。そのため、現在の投稿の添付ファイルを要求する必要があります。これは、ループ内にあるため、 に保存されています$post->ID。そのため、次のように現在の投稿の最初の添付ファイルをリクエストする必要があります。

$args = array(
    'post_type' => 'attachment',
    'posts_per_page' => 1,
    'post_parent' => $post->ID,
    'exclude'     => get_post_thumbnail_id()
    );

$attachments = get_posts( $args );

このようにして、最初の添付ファイルを取得する投稿を指定し、その投稿中に投稿のサムネイルを除外します。

これが最善の方法かどうかはわかりません。既にループに入っているため、新しいクエリは必要ありませんget_posts。ビットなしでその添付ファイルを取得できるはずではありませんか?

とにかく、詳細についてはget_posts(半分寝ていない間に読んでください):http://codex.wordpress.org/Template_Tags/get_posts

于 2013-10-03T09:53:52.253 に答える