正如我已经说过的,直接从codex
exclude
(字符串)从wp\\U list\\U categories生成的列表中排除一个或多个类别。此参数采用按唯一ID以逗号分隔的类别列表,按升序排列
正如你所说的,你必须使用slug类。为了使这成为可能和动态的,我认为最好是编写自己的包装函数来实现这一点。我们将使用get_terms()
(用于get_categories()
内部)以获取我们的类别和get_term_by()
获取类别ID以便我们可以将其传递给get_terms()
这是函数,为了更好地理解,我对它进行了很好的注释(需要PHP 5.4+)
function exclude_term_by( $taxonomy = \'category\', $args = [], $exclude = [] )
{
/*
* If there are no term slugs to exclude or if $exclude is not a valid array, return get_terms
*/
if ( empty( $exclude ) || !is_array( $exclude ) )
return get_terms( $taxonomy, $args );
/*
* If we reach this point, then we have terms to exclude by slug
* Simply continue the process.
*/
foreach ( $exclude as $value ) {
/*
* Use get_term_by to get the term ID and add ID\'s to an array
*/
$term_objects = get_term_by( \'slug\', $value, $taxonomy );
$term_ids[] = (int) $term_objects->term_id;
}
/*
* Set up the exclude parameter with an array of ids from $term_ids
*/
$excluded_ids = [
\'exclude\' => $term_ids
];
/*
* Merge the user passed arguments $args with the excluded terms $excluded_ids
* If any value is passed to $args[\'exclude\'], it will be ignored
*/
$merged_arguments = array_merge( $args, $excluded_ids );
/*
* Lets pass everything to get_terms
*/
$terms = get_terms( $taxonomy, $merged_arguments );
/*
* Return the results from get_terms
*/
return $terms;
}
在我开始使用之前,这里有一些注意事项
第一个参数,$taxonomy
是要传递给的特定分类法get_terms()
在函数内部,它默认为category
第二个参数,$args
采用与相同的参数get_terms()
. 请注意,如果设置了第三个参数,则默认值为exclude
如果向参数传递了任何内容,则忽略该参数的值。此值将被传递给的任何对象覆盖$exclude
. 如果未向此参数传递任何内容$exclude
, 需要将空数组作为值传递
第三个参数,$excludes
获取应排除的术语段塞数组。如果值不是有效数组,get_terms()
将在不排除必要条件的情况下返回,因此请确保传递一个slug数组
以与相同的方式处理函数的输出get_terms()
. 记住,还应该检查空值和WP_Error
对象,然后再使用函数中的值
根据需要修改和滥用代码
现在了解模板文件中的用法。注意传递给的空数组$args
参数,如果将任何内容传递给$exclude
参数
$terms = exclude_term_by( \'category\', [], [\'term-slug-one\', \'term-slug-two\'] );
if ( !empty( $terms ) && !is_wp_error( $terms ) ) {
?><pre><?php var_dump($terms); ?></pre><?php
}
有关用法的更多信息,请参阅
get_terms()
.