我正在wordpress中创建一个博客。
我有一个类别列表:技术艺术时尚家一生教育商业宗教设计和家居,营销
其中一些类别我只在自定义帖子类型(技术、艺术、时尚(中使用,其他类别只在普通帖子中使用(家庭、生活、教育、商业、宗教、设计和家庭、营销(。
现在,我需要获得只在普通帖子中使用的类别列表,以便在我的博客上显示它们((。我试着做了以下操作,但它返回了包括CPT在内的所有类别:
$categories = get_categories();
foreach($categories as $category) {
echo '<li class="cat-name" . '>' . $category->name . '</li>';
}
我只需要显示类别:家居、生活、教育、商业、宗教、设计与设计;主页,市场营销。
并排除CPT中正在使用的那些。请帮忙!
您需要传入参数并排除term_ids或包含在所需的term_ids中。您可以使用以下其中一个:'exclude'、'exclude_tree'或'include'。
$args = array(
'taxonomy' => 'category',
'exclude' => array(65,23,98,23,78), // term_ids you want to exclude
'exclude_tree' => (65,23,98,23,78), // term_ids you want to exclude and their descendants/children
'include' => (11,51,90,57,29), // only the term_ids you want to include
'orderby' => 'name',
'order' => 'ASC',
"hide_empty" => 1,
);
$cats = get_categories($args);
foreach ($cats as $cat){
echo $cat_slug = $cat->slug;
}
"包括">
要包含的术语ID的数组或逗号/空格分隔字符串。默认的空数组。
"排除">
要排除的术语ID的数组或逗号/空格分隔字符串。如果$include不为空,则忽略$exclude。默认的空数组。
‘exclude_tree’
要排除的术语ID的数组或逗号/空格分隔字符串及其所有子术语。如果$include不为空,则忽略$exclude_tree。默认的空数组。
了解有关可以传递给get_categories((或get_terms((get_posts((等的所有参数的更多信息https://developer.wordpress.org/reference/classes/wp_term_query/__construct/
如果以上不起作用,请尝试WP_Query
$args = array(
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array( 'home', 'life', 'education', 'business', 'religion', 'design-and-home', 'marketing' ),
'operator' => 'IN'
),
array(
'taxonomy' => 'custom_taxonomy_registerd_to_cpt_slug', // again make sure in your cpt plugin that this taxonomy is unique and not just 'category'
'field' => 'slug',
'terms' => array( 'technology', 'art', 'fashion' ),
'include_children' => false,
'operator' => 'NOT IN'
)
)
);
$cats = new WP_Query($args);
foreach ($cats as $cat){
print_r($cat); // use this to find the values you need. Remove after you build the link html
}
这个带有shortcode的函数经过测试,适用于我的
<?php
function list_categories_func($atts) {
$a = shortcode_atts( array('' => '',), $atts );
$args = array('taxonomy'=>'category','parent'=>0,'orderby'=>'name','order'=>'ASC', 'hide_empty'=>0,);
$categories=get_categories($args);
echo "<ul>";
foreach($categories as $category){
$name=$category->slug;
echo "<li>$id</li>";
}
echo "</ul>";
$output = ob_get_contents();
ob_end_clean();
return $output;
}
add_shortcode( 'ni_categories_row', 'list_categories_func' );
?>