私は自分の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()) :
要約すると、カスタム投稿タイプ= "ダウンロード"とカスタム分類= "ダウンロード_カテゴリ"を作成し、 "カテゴリ - ダウンロード - "に書き換えました。
最初の :あなたのarchive.phpの先頭にある " is_tax "は失敗しています。あなたのカスタム分類の名前は " downloads_category "であるべきです。それにスペルが必要です 下線を引く ハイフンではなく( Codex )。
これも次のように変更する必要があります。
" register_taxonomy ":カスタム分類の名前
" register_post_type ": '分類法'の行
" 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がそれを見たいのであれば、私は簡単に再投稿することができます。