私は普遍的なギャラリーページを持つことになるテーマをコーディングしようとしています。基本的には
http://www.engadget.com/galleries/ /
しかし、私は私がすべてのギャラリーを呼び出すために使用するものに迷っています。私はギャラリーをカスタム投稿タイプにする必要があります(だから私はdomain.com/gallery/title-of-gallery/を持っています)が、ギャラリーも[ギャラリー](またはそのようなもの)を介して投稿に挿入できる必要があります。 。また、ギャラリーにはある種のカテゴリを割り当てる必要があります(レビューやプレビューなど)。
レビューのために1つの投稿に複数のギャラリーを挿入できるようにする必要もあります(複数のギャラリーが必要な場合があります)。
誰もが私がこれを達成することができるだろう方法がありますか?
ここで根本的な質問は すべての投稿を画像ギャラリーでクエリするにはどうすればよいですか。 (このようなクエリがあると、それらをループ処理するカスタムテンプレートページを作成するのはかなり簡単です)。
1つの方法は次のとおりです。
attachment
のmime_type
を持つimage
投稿のカスタムクエリ$post->post_parent
を配列に追加しますpost__in
として渡します。おそらくこんな感じ:
<?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;
}
}