web-dev-qa-db-fra.com

Parcourez les taxonomies personnalisées et les posts

Bien que j'ai pu faire en sorte que cela fonctionne pour les catégories WP normales, je n'ai pas pu le faire fonctionner pour les taxonomies personnalisées.

Je voudrais parcourir chaque taxonomie personnalisée (les catégories dans mon cas) et produire un certain nombre de publications pour chacune.

Un exemple de sortie serait:

Category 1

post from category one
post from category one

read more category one


Category 2

post from category two
post from category two

read more category two

Bien sûr, cela répèterait à travers n'importe quelle taxonomie disponible pour le type de publication personnalisé.

7
curtismchale

J'ai pensé que je pourrais donner une autre réponse car celle-ci est un petit hacky, j'ai aussi ajouté une autre couche qui obtient toutes les taxonomies pour un type de message.

$post_type = 'post';

// Get all the taxonomies for this post type
$taxonomies = get_object_taxonomies( (object) array( 'post_type' => $post_type ) );

foreach( $taxonomies as $taxonomy ) : 

    // Gets every "category" (term) in this taxonomy to get the respective posts
    $terms = get_terms( $taxonomy );

    foreach( $terms as $term ) : 

        $posts = new WP_Query( "taxonomy=$taxonomy&term=$term->slug&posts_per_page=2" );

        if( $posts->have_posts() ): while( $posts->have_posts() ) : $posts->the_post();
            //Do you general query loop here  
        endwhile; endif;

    endforeach;

endforeach;

Il serait recommandé d’ajouter chaque publication trouvée à un tableau $post__not_in afin de pouvoir la transmettre au WP_Query afin d’éviter que des publications en double ne passent.

9
Joe Hoyle

Vous cherchez cela ?

<?php query_posts(array('post_type' => 'post type name', 'Taxonomy slug' => $term->slug ) ); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php endwhile; else: ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>

Comment créer une boucle de taxonomie personnalisée

J'espère que ça va aider

1
Maidul

Copiez et collez cette fonction dans votre functions.php

if ( ! function_exists( 'display_all_products_from_all_categories' ) ) {

    function display_all_products_from_all_categories() {

        // Get all the categories for Custom Post Type Product
        $args = array( 
            'post_type' => 'product', 
            'orderby' => 'id', 
            'order' => 'ASC' 
        );

        $categories = get_categories( $args );

        foreach ($categories as $category) {
            ?>
            <div class="<?php echo $category->slug; ?>">
                <!-- Get the category title -->
                <h3 class="title"><?php echo $category->name; ?></h3>

                <!-- Get the category description -->
                <div class="description">
                    <p><?php echo category_description( get_category_by_slug($category->slug)->term_id ); ?></p>
                </div>

                <ul class="mhc-product-grid">

                    <?php
                        // Get all the products of each specific category
                        $product_args = array(
                            'post_type'     => 'product',
                            'orderby'      => 'id',
                            'order'         => 'ASC',
                            'post_status'   => 'publish',
                            'category_name' => $category->slug //passing the slug of the current category
                        );

                        $product_list = new WP_Query ( $product_args );

                    ?>

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

                        <li class="product <?php the_field( 'product_flavor' ); ?>">
                            <a href="<?php the_permalink(); ?>" class="product-link">

                                <!-- if the post has an image, show it -->
                                <?php if( has_post_thumbnail() ) : ?>
                                    <?php the_post_thumbnail( 'full', array( 'class' => 'img', 'alt' => get_the_title() ) ); ?>
                                <?php endif; ?>

                                <!-- custom fields: product_flavor, product_description ... -->
                                <h3 class="title <?php the_field( 'product_flavor' ); ?>"><?php the_title(); ?></h3>
                                <p class="description"><?php the_field( 'product_description' ); ?></p>
                            </a>
                        </li>

                    <?php endwhile; wp_reset_query(); ?>
                </ul>

            </div>
            <?php
        }
    }
}

Puis appelez-le de n'importe où dans votre modèle avec:

display_all_products_from_all_categories();
0
drjorgepolanco