web-dev-qa-db-fra.com

Comment faire un modèle de page pour lister toutes les galeries?

J'essaie de coder un thème pour lequel je vais avoir une page de galerie universelle. Fondamentalement comme:

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

Cependant, je ne sais pas ce que j'appellerais toutes les galeries. J'ai besoin que les galeries soient des types de publication personnalisés (donc j'ai domain.com/gallery/title-of-gallery/), mais les galeries doivent également pouvoir être insérées dans des publications via [galerie] (ou quelque chose comme ça) . De plus, les galeries doivent avoir une sorte de catégorie (par exemple, des critiques ou des aperçus).

Je dois également être capable d'insérer plusieurs galeries dans un seul article pour les revues (où plusieurs galeries peuvent être nécessaires).

Quelqu'un at-il un moyen de parvenir à cela?

3
user24008

La question sous-jacente est la suivante: Comment interroger tous les messages contenant des galeries d’images? (puisque, une fois que vous avez une telle requête, créer une page de modèle personnalisée pour les parcourir en boucle est assez simple).

Une méthode serait:

  1. Requête personnalisée de attachment publications avec un mime_type de image
  2. Parcourez-les et ajoutez $post->post_parent à un tableau
  3. Requête personnalisée de publications, en passant le tableau ci-dessus d'identifiants de publication en tant que post__in
  4. Parcourez-les et affichez ce que vous souhaitez pour chaque

Peut-être comme ça:

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

Notez que cela tire all posts avec même une pièce jointe d’image. Vous pourriez peut-être avoir du chic en parcourant les images jointes et faire quelque chose comme:

// 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