web-dev-qa-db-ja.com

アーカイブ上のカスタム分類カテゴリをフィルタリングする方法

私は自分のarchive.phpを修正しようとしています。そこでカテゴリを選択し、それらのレコードをフィルタすることができます。

カテゴリを表示したり、分類ページであるかどうかを検出したりすることはできますが、それらを選択しても、フィルタ処理は行われません。何が悪いの?

カテゴリを選択すると、すべてのレコードが表示されますが、フィルタリングは行われません。

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');

ああ、そしてtax_queryを使っても何も表示されません….

$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

要約すると、カスタム投稿タイプ= "ダウンロード"とカスタム分類= "ダウンロード_カテゴリ"を作成し、 "カテゴリ - ダウンロード - "に書き換えました。

最初の :あなたのarchive.phpの先頭にある " is_tax "は失敗しています。あなたのカスタム分類の名前は " downloads_category "であるべきです。それにスペルが必要です 下線を引く ハイフンではなく( Codex )。
これも次のように変更する必要があります。

  1. " register_taxonomy ":カスタム分類の名前

  2. " register_post_type ": '分類法'の行

  3. " tax_query ": '分類学'の行.

Second :SallyCJが指摘したように、 ' tax query 'には 'terms'パラメータが必要です。

たとえば、カスタム分類法として「Type01」と「Type02」という2つの用語を作成し、それらのスラッグはtype01とtype02になるとします。クエリ内のコードの要素は次のようになります。

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

第3 :実際にナメクジを集めるにはコードが必要です。これが私の提案です

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

4番目 :スラッグをクエリに挿入する必要があります。このコードはテスト済みで動作します。もちろん、このコードの変数$ termsarrayは、前のメモと同じ変数です。

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

第五 :私はarchive.phpを使う代わりになる方法を提案します。代わりに、カスタム分類法用の分類法ファイルを作成してください。私はarchive.phpのコピーから "taxonomy-categoriesoria-de-downloads.php"を作成しました。アーカイブテンプレートを複雑にすることなく、カスタム分類法の出力をフォーマットできます。

このようなときは、特定の状況でどのテンプレートが呼び出されるのかをしっかり把握することが重要です。 コーデックステンプレート階層 は必須であり、「 Wordpressテンプレート階層の視覚化 」は非常にお勧めです。

6番目の :この回答の以前のバージョンでは、カスタム投稿自体を表示するためのファイルの概要を示し、用語を強調しています。寛容では、質問はまったくこれを言及していない、と私は無関係としてそれを削除しました。 OPがそれを見たいのであれば、私は簡単に再投稿することができます。

2
Tedinoz