WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

wp_terms_checklist() WP 3.0.0

Выводит <ul> список полей input type="checkbox" заголовком которых является название элемента указанной таксономии.

Это независимый от таксономии аналог функции wp_category_checklist()

Функция определена только в админке. Если она нужна во фронте, то подключите файл template.php перед её вызовом:

require_once ABSPATH .'/wp-admin/includes/template.php';
✈ 1 раз = 0.000455с = быстро | 50000 раз = 10.85с = медленно
Хуки из функции:
Возвращает

Выводит на экран HTML код.

Использование

wp_terms_checklist( $post_id, $args );

Шаблон использования

$args = array(
	'descendants_and_self' => 0,
	'selected_cats'        => false,
	'popular_cats'         => false,
	//'walker'               => null,
	'taxonomy'             => 'category',
	'checked_ontop'        => true,
	'echo'                 => true,
);
wp_terms_checklist( $post_id, $args );
$post_id(число)
ID поста для которого выстраивается список элементов таксономии.
По умолчанию: 0
$args(массив/строка)

Массив параметров для создания списка. Возможные значения:

  • descendants_and_self (число)
    ID элемента таксономии, когда нужно вывести дочерние элементы таксономии указанного элемента. 0 - выведет все элементы.
    По умолчанию: 0

  • selected_cats (массив)
    Список элементов таксономии, которые нужно отметить галочками. Если $post_id указан, то по умолчанию будут выделены элементы таксономии в которых есть указанный пост.
    По умолчанию: false

  • popular_cats (массив)
    Список элементов таксономии, которые получат класс "popular-category" (атрибут тега class).
    По умолчанию: false

  • walker (объект)
    Экземпляр класса, который будет строить вывод.
    По умолчанию: new Walker_Category_Checklist

  • taxonomy (строка)
    Название таксономии элементы которой будут выведены в чеклисте.
    По умолчанию: 'category'

  • checked_ontop (логический)
    true - поместить выделенные элементы наверх списка. Элементы будут помещены вверх даже есть они являются вложенными элементами другого элемента (древовидность нарушается).
    По умолчанию: true

  • echo (логический)
    true - выводить на экран. false - возвращать для обработки. С версии 4.4.
    По умолчанию: true

Примеры

#1 Получим чеклист элементов таксономии

Допустим у нас есть таксономия 'wpfunc' и нам нужно вывести список чекбоксов элемента 51 и всех его дочерних элементов. Также укажем выделенные и популярные элементы.

require_once ABSPATH .'/wp-admin/includes/template.php';

$args = array(
	'descendants_and_self' => 51,
	'selected_cats'        => array(219, 52),
	'popular_cats'         => array(219, 52),
	'taxonomy'             => 'wpfunc',
	'checked_ontop'        => true
);

echo '<ul>';
wp_terms_checklist( 0, $args );
echo '</ul>';

/* выведет:
<ul>
	<li id='wpfunc-52' class="popular-category">
		<label class="selectit"><input value="52" type="checkbox" name="tax_input[wpfunc][]" id="in-wpfunc-52" checked='checked' /> Комментарии</label>
	</li>

	<li id='wpfunc-219' class="popular-category">
		<label class="selectit"><input value="219" type="checkbox" name="tax_input[wpfunc][]" id="in-wpfunc-219" checked='checked' /> Пагинация комментариев</label>
	</li>

	<li id='wpfunc-51'>
		<label class="selectit"><input value="51" type="checkbox" name="tax_input[wpfunc][]" id="in-wpfunc-51" /> Комментарии, Пинги...</label>
		<ul class='children'>
			<li id='wpfunc-218'>
				<label class="selectit"><input value="218" type="checkbox" name="tax_input[wpfunc][]" id="in-wpfunc-218" /> Циклы комментариев</label>
			</li>
		</ul>
	</li>
</ul>
*/

Код wp terms checklist: wp-admin/includes/template.php WP 4.8.1

<?php
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 $args    An array of arguments.
	 * @param int   $post_id The post ID.
	 */
	$params = apply_filters( 'wp_terms_checklist_args', $args, $post_id );

	$r = wp_parse_args( $params, $defaults );

	if ( empty( $r['walker'] ) || ! ( $r['walker'] instanceof Walker ) ) {
		$walker = new Walker_Category_Checklist;
	} else {
		$walker = $r['walker'];
	}

	$taxonomy = $r['taxonomy'];
	$descendants_and_self = (int) $r['descendants_and_self'];

	$args = array( 'taxonomy' => $taxonomy );

	$tax = get_taxonomy( $taxonomy );
	$args['disabled'] = ! current_user_can( $tax->cap->assign_terms );

	$args['list_only'] = ! empty( $r['list_only'] );

	if ( is_array( $r['selected_cats'] ) ) {
		$args['selected_cats'] = $r['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( $r['popular_cats'] ) ) {
		$args['popular_cats'] = $r['popular_cats'];
	} else {
		$args['popular_cats'] = get_terms( $taxonomy, array(
			'fields' => 'ids',
			'orderby' => 'count',
			'order' => 'DESC',
			'number' => 10,
			'hierarchical' => false
		) );
	}
	if ( $descendants_and_self ) {
		$categories = (array) get_terms( $taxonomy, array(
			'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( $taxonomy, array( 'get' => 'all' ) );
	}

	$output = '';

	if ( $r['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'] ) ) {
				$checked_categories[] = $categories[$k];
				unset( $categories[$k] );
			}
		}

		// Put checked cats on top
		$output .= call_user_func_array( array( $walker, 'walk' ), array( $checked_categories, 0, $args ) );
	}
	// Then the rest of them
	$output .= call_user_func_array( array( $walker, 'walk' ), array( $categories, 0, $args ) );

	if ( $r['echo'] ) {
		echo $output;
	}

	return $output;
}

Cвязанные функции

Из метки: Список (wp_list списки)

Еще из раздела: Таксономии: рубрики, метки, ...

wp_terms_checklist 1 комментарий
  • Zen

    Привет, хочу в стандартном метабоксе записей (категории для этого типа записей, выводимые через show_admin_column) вывести вместо (или вместе) названия таксономии их краткое описание. Подскажи пожалуйста, куда здесь смотреть. Спасибо

    Ответить3 месяца назад #

Здравствуйте, !

Ваш комментарий