web-dev-qa-db-ja.com

すべてのギャラリーを一覧表示するページテンプレートを作成する方法

私は普遍的なギャラリーページを持つことになるテーマをコーディングしようとしています。基本的には

http://www.engadget.com/galleries/ /

しかし、私は私がすべてのギャラリーを呼び出すために使用するものに迷っています。私はギャラリーをカスタム投稿タイプにする必要があります(だから私はdomain.com/gallery/title-of-gallery/を持っています)が、ギャラリーも[ギャラリー](またはそのようなもの)を介して投稿に挿入できる必要があります。 。また、ギャラリーにはある種のカテゴリを割り当てる必要があります(レビューやプレビューなど)。

レビューのために1つの投稿に複数のギャラリーを挿入できるようにする必要もあります(複数のギャラリーが必要な場合があります)。

誰もが私がこれを達成することができるだろう方法がありますか?

3
user24008

ここで根本的な質問は すべての投稿を画像ギャラリーでクエリするにはどうすればよいですか。 (このようなクエリがあると、それらをループ処理するカスタムテンプレートページを作成するのはかなり簡単です)。

1つの方法は次のとおりです。

  1. attachmentmime_typeを持つimage投稿のカスタムクエリ
  2. それらをループし、$post->post_parentを配列に追加します
  3. 投稿のカスタムクエリ。上記の投稿IDの配列をpost__inとして渡します。
  4. それらをループして、それぞれに好きなものを出力してください

おそらくこんな感じ:

<?php
// Custom query args for image attachments
$image_attachments_query_args = array(
    'post_type' => 'attachment',
    'mime_type' => 'image'
);
// Query image attachments
$image_attachments = new WP_Query( $image_attachments_query_args );

// Loop through them and get parent post IDs
$gallery_post_ids = array();

foreach ( $image_attachments as $image_attachment ) {
    $gallery_post_ids[] = $image_attachment->post_parent;
}

// Custom query args for gallery posts
$gallery_posts_query_args = array(
    'post__in' => $gallery_post_ids
);

// Query gallery posts
$gallery_posts = new WP_Query( $gallery_posts_query_args );

// Loop through gallery posts

if ( $gallery_posts->have_posts() ) : while ( $gallery_posts->have_posts() ) : $gallery_posts->the_post();
    // Loop output goes here
endwhile; endif;
wp_reset_postdata();
?>

これはallpostsを単一の画像添付ファイルでも引っ張ることに注意してください。画像の添付ファイルをループ処理するときには、気分が悪くなることがあります。

// Placeholder array for IDs
$temp_post_ids();

// Final array for gallery post IDs
$gallery_post_ids = array();

// Loop through them and get parent post IDs
foreach ( $image_attachments as $image_attachment ) {
    // Add ID to the placeholder array
    $temp_post_ids[] = $image_attachment->post_parent;
    // If this post ID has multiple image attachments,
    // add it to the gallery posts query;
    // This will prevent posts with only a single
    // attached image from being queried in the next step
    if ( in_array( $image_attachment->post_parent, $temp_post_ids ) ) {
        $gallery_post_ids[] = $image_attachment->post_parent;
    }
}
1
Chip Bennett