web-dev-qa-db-fra.com

Le modèle de taxonomie personnalisée ne fonctionne pas avec une boucle simple. Plusieurs CPT utilisant le même taxonomie

J'ai besoin d'aide pour WP taxonomie personnalisée et types de publication personnalisés. Je n'ai jamais trouvé de solution de travail jusqu'à présent. S'il vous plaît accepter mes excuses si cela a une solution simple. J'ai essayé de mon mieux pour trouver la solution partout d'abord.

Explication du problème -

  1. J'ai une taxonomie appelée "département" .
  2. J'ai 3 CPT appelé "cours", "faculté", "bibliothèque" .

Les 3 CPT utiliseront la même taxonomie "département" . J'ai tout configuré avec succès et assigné la taxonomie "département" à tous les 3 CPT.

J'essaie maintenant d'afficher les publications (les 3 publications du CPT) par "département" taxonomie termes (par exemple, les termes "x", "y", "z" pour la taxonomie "département") . J'ai un fichier de modèle appelé "taxonomy-department.php" , qui a une boucle simple -

<?php if (have_posts()) : ?>

        <ul> 

        <?php while (have_posts()) : the_post(); ?> 
            <li>
                <?php the_title(); ?>
            </li>
        <?php endwhile; ?>

        </ul>
        <?php else : ?>

        <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>

<?php endif; ?>

La boucle ci-dessus à l'intérieur du modèle de taxonomie ne fonctionne pas et ne montre aucun message. Je vais juste à autre déclaration. Je ne sais pas comment y parvenir.

Si je récupère des publications (avec votre aide), est-il également possible de filtrer les publications par CPT? (dans le fichier modèle de taxonomie)

Toute aide est très appréciée.

2
Amit

WP affiche par défaut les messages natifs normaux dans les archives. Il ne captera pas automatiquement quels types de post que vous voulez dans vos archives.

Vous devrez ajuster la requête principale pour l'expliquer, avec quelque chose comme:

add_action( 'pre_get_posts', function ( WP_Query $query ) {

    if ( $query->is_main_query() && $query->is_tax( 'department' ) ) {
        $query->set( 'post_type', [ 'course', 'faculty', 'library' ] );
    }
} );
1
Rarst

S'il vous plaît essayer ceci-

$post_type = array('course', 'faculty', 'library');
$terms = array( 'x-tax-slug', 'y-tax-slug', 'z-tax-slug' );
$args = array(
    'post_type' => $post_type,
    'tax_query' => array(
        array(
            'taxonomy' => 'department',
            'field'    => 'slug',
            'terms'    => $terms,
        ),
    ),
);
$query = new WP_Query( $args );

<?php if (have_posts()) : ?>

        <ul> 

        <?php while ($query->have_posts()) : $query->the_post(); ?> 
            <li>
                <?php the_title(); ?>
            </li>
        <?php endwhile; ?>

        </ul>
        <?php else : ?>

        <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>

<?php endif; ?>

<?php wp_reset_postdata(); // reset the query ?>

Nous exécutons donc ici une requête personnalisée basée sur votre taxonomie department et son type de publication personnalisé. Et enfin, nous réinitialisons la requête.

0
CodeMascot

J'aime remercier @Rarst pour sa contribution à la réponse. Voici le dernier morceau de code -

add_action( 'pre_get_posts', 'my_tax_query' );

function my_tax_query($query){

    if ( !is_admin() && $query->is_main_query() && $query->is_tax( 'department' ) ) {
        $query->set( 'post_type', array( 'course', 'faculty', 'library' ) );
    }
};

Placez le code à l'intérieur du fichier functions.php. Tous les articles (pour la page du terme) seront saisis, quel que soit leur type.

Par exemple, si votre page de terme est http://domain-name.com/taxonomy/term1/, vous obtiendrez toutes les publications pour "term1" pour tous les types de publication.

Maintenant, pouvons-nous filtrer les publications par "types de publication"? Y-a-t-il un moyen de faire ça? Merci!

0
Amit