我正在尝试根据页面设置显示的分类法显示分类法描述(使用变量设置)
实际上,我只看到第一个描述,无论设置了哪个类别变量。
以下是我如何设置它:
我已经构建了一个名为“product”的自定义帖子类型,并设置了一个名为“product_type”的分类。
//Register product post type
add_action('init', 'product_register');
function product_register() {
$labels = array(
'name' => ('Products'),
'singular_name' => ('Product'),
'add_new' => ('Add New'),
'add_new_item' => ('Add New Product'),
'edit_item' => ('Edit Product'),
'new_item' => ('New Product'),
'view_item' => ('View Product'),
'search_items' => ('Search'),
'not_found' => ('Nothing found'),
'not_found_in_trash' => ('Nothing found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'menu_icon' => 'dashicons-tag',
'public' => true,
'has_archive' => true,
'supports' => array('title', 'revisions', 'editor','thumbnail'),
'capability_type' => 'post',
'rewrite' => array("slug" => "product"), // Permalinks format
);
register_taxonomy('product_type', array('product'), array(
'hierarchical' => true,
'label' => 'Product Type',
'singular_label' => 'Type',
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => true)
);
register_post_type( 'product' , $args );
}
在wordpress后端,我已经加载了一些术语,并且还添加了描述。
archive-products.php的工作方式类似于登陆页面,但会接受来自名为$ type的变量的信息来过滤内容。
if (isset($_GET['type']) || !empty($_GET['type']) ) {
$filtered = true;
$type = $_GET['type'];
}
有了这些信息,我可以为包含该分类术语的项目设置WP_Query。
if ($filtered == true) {
$type = explode(' ', $_GET['type']);
$taxonomy = array(
array(
'taxonomy' => 'product_type',
'field' => 'slug',
'terms' => $type
)
);
$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'order' => 'DEC',
'orderby' => 'title',
'offset' => '0',
'tax_query' => $taxonomy
);
$the_query = new WP_Query($args);
if($the_query->have_posts()):
$terms = get_the_terms( $post->ID, 'product_type' );
if($terms) {
foreach( $terms as $term ) {
echo $term->description; //always shows first term description, but should display description based on $type
}
}
while($the_query->have_posts()):$the_query->the_post();
the_title();
the_content();
endwhile;
else: //nothing to show here
endif;} else {
// non-filtered page design
}
查询效果很好但是,正如我之前提到的,它只是拉动了第一个分类法描述。
这是要处理的部分:
$terms = get_the_terms( $post->ID, 'product_type' );
if($terms) {
foreach( $terms as $term ) {
echo $term->description;
}
}
我猜测它需要在查询中找到正确的描述,但它似乎没有什么区别。
我也试过这个:
$term = get_term_by( $post->ID, $type, 'product_type' );
echo $term->description;
但这不会返回任何内容。
我没有想法。我没有通过谷歌或搜索这个网站找到任何东西。
感谢任何建议,提前谢谢。