wake-up-neo.net

Wie filtere ich benutzerdefinierte Taxonomiekategorien im Archiv?

Ich versuche meine archive.php zu ändern, wo ich die Kategorien auswählen und deren Einträge filtern kann.

Ich kann die Kategorien anzeigen und feststellen, ob es sich um eine Taxonomieseite handelt. Durch Auswahl dieser Kategorien werden sie jedoch nicht gefiltert. Was mache ich falsch?

Wenn ich eine Kategorie auswähle, werden alle Datensätze angezeigt, jedoch ohne Filterung.

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, und wenn ich tax_query benutze, wird nichts angezeigt ...

$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

Fazit: Sie haben einen benutzerdefinierten Beitrag vom Typ = "Downloads" und eine benutzerdefinierte Taxonomie = "Downloads_Category" mit einem Umschreiben auf "Kategorie-de-Downloads" erstellt.

First : Das " is_tax " am Kopf Ihrer archive.php schlägt fehl, weil der Name Ihrer benutzerdefinierten Taxonomie " downloads_category " lauten sollte; es muss mit einem geschrieben werden unterstreichen eher als ein Bindestrich ( Codex ).
Sie müssen dies auch ändern in:

  1. " register_taxonomy ": der Name Ihrer benutzerdefinierten Taxonomie,

  2. " register_post_type ": die Zeile 'Taxonomien',

  3. " tax_query ": die 'Taxonomie'-Zeile.

Second : Wie von SallyCJ festgestellt, erfordert ' tax query ' einen 'terms'-Parameter.

Beispiel: Nehmen wir an, Sie erstellen zwei Begriffe für Ihre benutzerdefinierte Taxonomie: "Type01" und "Type02". Die Slugs für diese Begriffe lauten "type01" und "type02". Die Codeelemente in Ihrer Abfrage lauten wie folgt:

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

Drittens : Sie benötigen Code, um die Schnecken tatsächlich zu sammeln. Hier ist mein Vorschlag

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

Viertens : Sie müssen die Slugs in die Abfrage einfügen. Dieser Code wurde getestet und funktioniert. Natürlich ist die Variable $ termsarray in diesem Code dieselbe Variable wie in der vorherigen Anmerkung.

// 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,
                        )
                )
        );

Fünftens : Ich schlage eine Alternative zur Verwendung von archive.php vor. Erstellen Sie stattdessen eine Taxonomiedatei für Ihre benutzerdefinierte Taxonomie. Ich habe aus einer Kopie von archive.php eine "taxonomy-categoria-de-downloads.php" erstellt. Es funktioniert einwandfrei und Sie können die Ausgabe für Ihre benutzerdefinierte Taxonomie formatieren, ohne die Archivvorlage komplizierter gestalten zu müssen.

In solchen Situationen ist es wichtig zu wissen, welche Vorlagen in bestimmten Situationen aufgerufen werden. Die Codex-Vorlagenhierarchie ist unerlässlich und " Visualisieren Sie die Wordpress-Vorlagenhierarchie " ist sehr zu empfehlen.

Sechste : In einer früheren Version dieser Antwort habe ich die Dateien umrissen, um den benutzerdefinierten Beitrag selbst anzuzeigen, wobei die Begriffe hervorgehoben sind. Bei der Refektion erwähnt die Frage dies überhaupt nicht, und ich habe es als irrelevant entfernt. Wenn das OP es sehen möchte, kann ich es einfach wieder posten.

2
Tedinoz