函数文档

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_self int
    ID of the category to output along with its descendants.
    Default 0.
  • selected_cats int[]
    Array of category IDs to mark as checked. Default false.
  • popular_cats int[]
    Array of category IDs to receive the “popular-category” class.
    Default false.
  • walker Walker
    Walker object to use to build the output. Default empty which results in a Walker_Category_Checklist instance being used.
  • taxonomy string
    Taxonomy to generate the checklist for. Default 'category'.
  • checked_ontop bool
    Whether to move checked items out of the hierarchy and to the top of the list. Default true.
  • echo bool
    Whether to echo the generated markup. False to return the markup instead of echoing it. Default true.

Default:array()

Return

string HTML list of input elements.

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.

Changelog

Version Description
4.4.0 Introduced the $echo argument.
3.0.0 Introduced.

User Contributed Notes

  1. Skip to note 2 content

    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.