web-dev-qa-db-fra.com

Comment filtrer les catégories de taxonomie personnalisées sur les archives?

J'essaie de modifier mon archive.php où je peux sélectionner les catégories et filtrer leurs enregistrements.

Je peux afficher les catégories, détecter s'il s'agit d'une page de taxonomie, mais en les sélectionnant, elles ne filtrent pas. Qu'est-ce que je fais mal?

Lorsque je sélectionne une catégorie, tous les enregistrements sont affichés, mais sans filtrage.

archive.php

<?php }elseif(is_tax('downloads-category')){ ?>
<section id="conteudo">
    <div class="title">
        <div class="container">
            <h1>Category Name</h1>
            <?php if (function_exists('yoast_breadcrumb')){ yoast_breadcrumb('<p id="breadcrumbs">','</p>'); }?>
        </div>
    </div>
    <div class="content-master">
        <div class="container">
            <div class="row more-Gutter">
                <aside class="col-sm-3">

                </aside>
                <div class="col-sm-9">
                    <?php 
                        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                        $infoDownload = array(
                            'post_type' => 'downloads', 
                            'taxonomy'=>'downloads-category',
                            'paged' => $paged
                        );
                        $resultadoDownload = new WP_Query($infoDownload); 
                        if ($resultadoDownload->have_posts()) :
                        while ($resultadoDownload->have_posts()) : $resultadoDownload->the_post();
                            $postThumb = (has_post_thumbnail()) ? get_the_post_thumbnail_url() : get_stylesheet_directory_uri()."/img/layout/sem-imagem.jpg";
                            $postThumb = "<img src=\"".$postThumb."\" class=\"img-fluid\">";
                        ?>
                        <div class="row lista-download">
                            <div class="col-sm-4">
                                <?php echo $postThumb; ?>
                            </div>
                            <div class="col-sm-8">
                                <h3><?php the_title() ?></h3>
                                <?php the_content(); ?>
                            </div>
                        </div>
                    <?php 
                        wp_reset_postdata();
                        endwhile;
                        wpbs_pagination();
                        endif;
                    ?>
                </div>
            </div>
        </div>
    </div>
</section>

functions.php

function create_posttype() {
    register_post_type('downloads',
        array(
            'labels' => array(
                'name' => __('Downloads'),
                'featured_image' => __('Imagem Capa'),
                'singular_name' => __('Download'),
            ),
            'taxonomies'  => array('downloads-category'),
            'supports' => array(
                'title',
                'editor',
                'custom-fields',
                'thumbnail'
            ),
            'menu_icon'   => 'dashicons-category',
            'with_front' => true,
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'downloads'),
        )
    );
    $labels = array(
        'name' => _x('Categorias', 'taxonomy general name'),
        'singular_name' => _x('Categoria', 'taxonomy singular name'),
        'search_items' =>  __('Procurar categoria'),
        'all_items' => __('Todos'),
        'edit_item' => __('Editar categoria'), 
        'update_item' => __('Editar categoria'),
        'add_new_item' => __('Adicionar categoria'),
        'new_item_name' => __('Nova categoria')
    );    
    register_taxonomy('downloads-category',array('downloads'), array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'query_var' => true,
        'show_in_nav_menus' => true,
        'rewrite' => array('slug' => 'categoria-de-downloads', 'with_front' => false),
    ));   
}
add_action('init', 'create_posttype');

Oh, et quand j'utilise tax_query, rien ne s'affiche ...

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$infoDownload = array(
    'post_type' => 'downloads',
    'tax_query' => array(
        array(
            'taxonomy'=>'downloads-category',
            'field'    => 'slug'
        )
    ),
    'paged' => $paged
);
$resultadoDownload = new WP_Query($infoDownload); 
if ($resultadoDownload->have_posts()) :
1
Maykel Esser

Rappel: vous avez créé un message personnalisé de type = "téléchargements} _" et une taxonomie personnalisée = "téléchargements_catégorie" avec une réécriture en "catégorie de téléchargements".

First : Le " is_tax " en tête de votre archive.php échoue car le nom de votre taxonomie personnalisée doit être " downloads_category "; il doit être orthographié avec un souligner plutôt qu'un trait d'union ( Codex ).
Vous devez également changer cela en:

  1. " register_taxonomy ": le nom de votre taxonomie personnalisée,

  2. " register_post_type ": la ligne 'taxonomies',

  3. " tax_query ": la ligne 'taxonomie'.

Second : comme indiqué par SallyCJ, ' requête fiscale ' nécessite un paramètre 'termes'.

Par exemple: supposons que vous créez deux termes pour votre taxonomie personnalisée - 'Type01' et 'Type02' et que les slugs pour celles-ci seraient type01 et type02. Les éléments de code de votre requête seraient ainsi:

    array(
        'taxonomy' => 'downloads_category',
        'field'    => 'slug',
        'terms'    => array( 'type01', 'type02' ),
  )

Troisième : vous avez besoin de code pour collecter les slugs. Voici ma suggestion

// get all the terms for this custom taxonomy
        $myterms = get_terms( array(
                'taxonomy' => 'downloads_category',
                'hide_empty' => false,
        ) );    
        //echo "the terms are <pre>";print_r($myterms);echo "</pre>"; //DEBUG

        //create a simple array to store the terms for use in a query
        $termsarray = []; 
        // get the slugs only
        $termsarray = wp_list_pluck( $myterms, 'slug' );
        //echo "terms array is <pre>";print_r($termsarray);echo "</pre>"; //DEBUG

Quatrième : vous devez insérer les slugs dans la requête. Ce code a été testé et fonctionne. Bien entendu, la variable $ termsarray dans ce code est la même variable que dans la note précédente.

// build a new query to get all the posts for the custom taxonomy
        $myargs = array(
                'post_type' => 'downloads',
                'tax_query' => array(
                        array(
                                'taxonomy' => 'downloads_category',
                                'field' => 'slug',
                                'terms' => $termsarray,
                        )
                )
        );

Fifth : Je suggère une alternative à l'utilisation de archive.php. Créez plutôt un fichier de taxonomie pour votre taxonomie personnalisée. J'ai créé un "taxonomy-categoria-de-downloads.php" à partir d'une copie de archive.php. Cela fonctionne très bien et vous permet de formater la sortie pour votre taxonomie personnalisée sans avoir à rendre le modèle d'archive plus compliqué.

Dans des moments comme celui-ci, il est important de bien comprendre quels modèles sont appelés dans certaines situations. La hiérarchie de modèles Codex est essentielle et " Visualize la hiérarchie de modèles Wordpress " est vivement recommandée.

Sixième : Dans une version antérieure de cette réponse, je décrivais les fichiers pour afficher la publication personnalisée elle-même, avec les termes mis en évidence. En ce qui concerne la réflexion, la question ne le mentionne pas du tout, et je l’ai retirée comme non pertinente. Si le PO veut le voir, je peux facilement le poster à nouveau.

2
Tedinoz