wp_terms_checklist()
云策文档标注
概述
wp_terms_checklist() 是 WordPress 中用于生成分类法术语复选框列表的函数,它是 wp_category_checklist() 的独立于分类法的版本。该函数输出一个无序列表,包含以术语名称标记的复选框输入元素,适用于后台管理界面。
关键要点
- 函数输出一个无序列表的复选框元素,标签为术语名称,用于选择分类法术语。
- 它是 wp_category_checklist() 的通用版本,支持任意分类法,默认使用 'category'。
- 接受两个参数:$post_id(可选,默认为0)和 $args(可选,数组或字符串参数)。
- 参数包括 descendants_and_self、selected_cats、popular_cats、walker、taxonomy、checked_ontop 和 echo,用于自定义列表行为。
- 使用 Walker_Category_Checklist 作为默认的 Walker 对象来构建输出,但可通过参数自定义。
- 如果当前用户没有分配术语的权限,复选框将被禁用。
- 函数通过 wp_terms_checklist_args 过滤器允许参数修改。
- 返回 HTML 字符串,或根据 echo 参数直接输出。
代码示例
function wp_terms_checklist( $post_id = 0, $args = array() ) {
$defaults = array(
'descendants_and_self' => 0,
'selected_cats' => false,
'popular_cats' => false,
'walker' => null,
'taxonomy' => 'category',
'checked_ontop' => true,
'echo' => true,
);
// 函数实现代码(略)
}注意事项
- 该函数主要用于后台管理界面,如果当前用户无权分配术语,复选框会被禁用。
- 函数可能未定义,使用时需确保包含 wp-admin/includes/template.php 文件。
- 从版本 4.4.0 开始引入了 $echo 参数,3.0.0 版本首次引入。
原文内容
Outputs an unordered list of checkbox input elements labelled with term names.
Description
Taxonomy-independent version of wp_category_checklist() .
Parameters
$post_idintoptional-
Post ID. Default 0.
$argsarray|stringoptional-
Array or string of arguments for generating a terms checklist.
descendants_and_selfintID of the category to output along with its descendants.
Default 0.selected_catsint[]Array of category IDs to mark as checked. Default false.popular_catsint[]Array of category IDs to receive the “popular-category” class.
Default false.walkerWalkerWalker object to use to build the output. Default empty which results in a Walker_Category_Checklist instance being used.taxonomystringTaxonomy to generate the checklist for. Default'category'.checked_ontopboolWhether to move checked items out of the hierarchy and to the top of the list. Default true.echoboolWhether to echo the generated markup. False to return the markup instead of echoing it. Default true.
Default:
array()
Source
function wp_terms_checklist( $post_id = 0, $args = array() ) {
$defaults = array(
'descendants_and_self' => 0,
'selected_cats' => false,
'popular_cats' => false,
'walker' => null,
'taxonomy' => 'category',
'checked_ontop' => true,
'echo' => true,
);
/**
* Filters the taxonomy terms checklist arguments.
*
* @since 3.4.0
*
* @see wp_terms_checklist()
*
* @param array|string $args An array or string of arguments.
* @param int $post_id The post ID.
*/
$params = apply_filters( 'wp_terms_checklist_args', $args, $post_id );
$parsed_args = wp_parse_args( $params, $defaults );
if ( empty( $parsed_args['walker'] ) || ! ( $parsed_args['walker'] instanceof Walker ) ) {
$walker = new Walker_Category_Checklist();
} else {
$walker = $parsed_args['walker'];
}
$taxonomy = $parsed_args['taxonomy'];
$descendants_and_self = (int) $parsed_args['descendants_and_self'];
$args = array( 'taxonomy' => $taxonomy );
$tax = get_taxonomy( $taxonomy );
$args['disabled'] = ! current_user_can( $tax->cap->assign_terms );
$args['list_only'] = ! empty( $parsed_args['list_only'] );
if ( is_array( $parsed_args['selected_cats'] ) ) {
$args['selected_cats'] = array_map( 'intval', $parsed_args['selected_cats'] );
} elseif ( $post_id ) {
$args['selected_cats'] = wp_get_object_terms( $post_id, $taxonomy, array_merge( $args, array( 'fields' => 'ids' ) ) );
} else {
$args['selected_cats'] = array();
}
if ( is_array( $parsed_args['popular_cats'] ) ) {
$args['popular_cats'] = array_map( 'intval', $parsed_args['popular_cats'] );
} else {
$args['popular_cats'] = get_terms(
array(
'taxonomy' => $taxonomy,
'fields' => 'ids',
'orderby' => 'count',
'order' => 'DESC',
'number' => 10,
'hierarchical' => false,
)
);
}
if ( $descendants_and_self ) {
$categories = (array) get_terms(
array(
'taxonomy' => $taxonomy,
'child_of' => $descendants_and_self,
'hierarchical' => 0,
'hide_empty' => 0,
)
);
$self = get_term( $descendants_and_self, $taxonomy );
array_unshift( $categories, $self );
} else {
$categories = (array) get_terms(
array(
'taxonomy' => $taxonomy,
'get' => 'all',
)
);
}
$output = '';
if ( $parsed_args['checked_ontop'] ) {
/*
* Post-process $categories rather than adding an exclude to the get_terms() query
* to keep the query the same across all posts (for any query cache).
*/
$checked_categories = array();
$keys = array_keys( $categories );
foreach ( $keys as $k ) {
if ( in_array( $categories[ $k ]->term_id, $args['selected_cats'], true ) ) {
$checked_categories[] = $categories[ $k ];
unset( $categories[ $k ] );
}
}
// Put checked categories on top.
$output .= $walker->walk( $checked_categories, 0, $args );
}
// Then the rest of them.
$output .= $walker->walk( $categories, 0, $args );
if ( $parsed_args['echo'] ) {
echo $output;
}
return $output;
}
Hooks
- apply_filters( ‘wp_terms_checklist_args’, array|string $args, int $post_id )
-
Filters the taxonomy terms checklist arguments.
Skip to note 2 content
Mikko Saari
Note that if the current user is not allowed to assign terms, the checkboxes in the form are disabled. This function is meant for admin-facing lists. Also, this function is not always defined. You can use
include ABSPATH . 'wp-admin/includes/template.php';to make sure the function is defined.