web-dev-qa-db-fra.com

Boucle de modèle de taxonomie personnalisée

Je sais que cette question est posée en nombre mais je ne trouve pas la réponse qui me convienne.

Eh bien, je fais quelques types de messages personnalisés et certaines taxonomies personnalisées. J'ai le type de message personnalisé Produits et la taxonomie qui y est liée Catégories de produits . Lorsque l'utilisateur est à la pageProduitset clique sur unCatégorie de produit, je souhaite lui montrer tous les produits de cette catégorie spécifique.

Le problème est que les catégories de produits seront d’environ 50. Pour l’instant, la seule chose que j’ai trouvée est de mettre cette boucle

<?php $loop = new WP_Query( array( 'post_type' => 'all_products', 'posts_per_page' => 12, 'products' => 'advance' ) ); ?>

Mais cela montre les messages que pour la catégorie avance. J'ai besoin d'un moyen de prendre automatiquement la catégorie sur laquelle l'utilisateur a cliqué. La mauvaise solution consiste à créer 50 taxonomy- {slug} .php fichiers. Mais je veux la voie propre. Et je n'arrive pas à le trouver.

J'ai lu tout le codex sur la hiérarchie des gabarits et spécifique aux taxonomies personnalisées, et j'ai cherché le demi-échange de pile, mais rien (mais j'ai peut-être oublié quelque chose: P).

J'ai essayé de décrire ma question aussi clairement que possible. Si vous ne comprenez pas quelque chose, dites-le-moi et j'essaierai de mettre à jour la question avec plus d'informations.

Je vous remercie

1
hambos22

La façon dont je lis votre question est que vous avez besoin de 12 messages par page dans cette taxonomie, quel que soit le terme actuel affiché.

Cela peut être facilement fait avec pre_get_posts . Vous ne devez jamais modifier la requête principale pour une requête personnalisée sur des pages d'archive. Avoir lu cette réponse je l'ai récemment fait sur ce sujet.

Utilisez le is_tax() conditionnel pour cibler la page taxonomie et voir les paramètres

Ajoutez ceci à functions.php. Vous pouvez également n’utiliser qu’un seul taxonomy.php pour tous les termes, inutile de créer 50 autres.

function custom_ppp( $query ) {
    if ( !is_admin() && $query->is_tax() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', '12' );
    }
}
add_action( 'pre_get_posts', 'custom_ppp' );

EDIT

Dans taxonomy.php, changez ceci

<?php $loop = new WP_Query( array( 'post_type' => 'all_products', 'pre_get_posts' => 12, 'products' => 'advance' ) ); ?> 

<?php while ( $loop->have_posts() ) : $loop->the_post(); ?> 
    //content 
<?php endwhile; ?>

de nouveau à cela

<?php while ( have_posts() ) : the_post(); ?> 
   //content
<?php endwhile; ?>
1
Pieter Goosen

Ce que vous décrivez est vaguement lié à la "recherche par facettes", mais vous ne recherchez pas tout à fait. :)

En un mot, vous devez:

  1. Communiquer des informations sur la taxonomie "sélectionnée" à la page, cette opération peut être effectuée avec une requête GET ou rewrite endpoint
  2. Générez des liens (ou une interface quelconque) en conséquence
  3. Ajustez la requête principale (!) De la page via pre_get_posts. Si vous modifiez les requêtes dans le modèle, vous rencontrerez très probablement des problèmes de pagination.
0
Rarst

C’est ce que j’utilise pour Le type de message personnalisé health et La taxonomie personnalisée health-category corrige également la pagination.

<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$q = new WP_Query([
    'post_type' => 'product',
    'posts_per_page' => get_option('posts_per_page'),
     get_query_var( 'taxonomy' ) => get_query_var( 'term' ),
    'paged' => $paged
]);
$temp_query = $wp_query;
$wp_query = null;
$wp_query = $q;

if ( $q->have_posts() ) :
    while ( $q->have_posts() ) : $q->the_post();

        // post content goes here..

    endwhile;
endif;

// Reset postdata
wp_reset_postdata();

// pagination goes here..

// Reset main query object
$wp_query = NULL;
$wp_query = $temp_query;
?>
0
Aamer Shahzad