пользовательская функция для wp_list_categories для перечисления терминов в виде флажков

Мне нужно написать пользовательскую функцию для wp_list_categories, чтобы вместо отображения иерархического списка ссылок они представляли собой список флажков с родительскими терминами, отображаемыми в виде тегов h3.

Окончательный результат будет выглядеть http://jsfiddle.net/amesy/kwqpf5fv/6/

Вот код PHP в моем файле шаблона WordPress …

<?php
//list terms in a given taxonomy using wp_list_categories (also useful as a widget if using a PHP Code plugin)

$taxonomy     = 'tags';
$orderby      = 'name';
$show_count   = 1;      // 1 for yes, 0 for no
$pad_counts   = 0;      // 1 for yes, 0 for no
$hierarchical = 1;      // 1 for yes, 0 for no
$title        = '';

$args = array(
'taxonomy'     => $taxonomy,
'orderby'      => $orderby,
'show_count'   => $show_count,
'pad_counts'   => $pad_counts,
'hierarchical' => $hierarchical,
'title_li'     => $title
);

?>

<ul class="categories">
<?php wp_list_categories( $args ); ?>
</ul>

Вот HTML, который <?php wp_list_categories( $args ); ?> выходы …

<ul class="categories">
<li class="cat-item cat-item-21"><a href="http://tandsdev.co.uk/portfoliotags/client/" >Client</a>      (0)
<ul class='children'>
<li class="cat-item cat-item-22"><a href="http://tandsdev.co.uk/portfoliotags/bmw/" >BMW</a> (3)
</li>
</ul>
</li>
<li class="cat-item cat-item-25"><a href="http://tandsdev.co.uk/portfoliotags/section/" >Section</a>    (0)
<ul class='children'>
<li class="cat-item cat-item-27"><a href="http://tandsdev.co.uk/portfoliotags/automotive/" >Automotive</a> (3)
</li>
<li class="cat-item cat-item-28"><a href="http://tandsdev.co.uk/portfoliotags/property/" >Property</a> (2)
</li>
</ul>
</li>
<li class="cat-item cat-item-26"><a href="http://tandsdev.co.uk/portfoliotags/service/" >Service</a> (0)
<ul class='children'>
<li class="cat-item cat-item-29"><a href="http://tandsdev.co.uk/portfoliotags/branding/" >Branding</a> (3)
</li>
<li class="cat-item cat-item-30"><a href="http://tandsdev.co.uk/portfoliotags/email/" >Email</a> (3)
</li>
<li class="cat-item cat-item-31"><a href="http://tandsdev.co.uk/portfoliotags/website/" >Website</a> (2)
</li>
</ul>
</li>
</ul>

Код флажка Я хотел бы, чтобы каждый термин отображался, так как он сформирует систему фильтрации, которую можно увидеть здесь. http://jsfiddle.net/amesy/kwqpf5fv/6/

<div class="tags">
<h3>service</h3>
<label><input type="checkbox" id="type-Website" rel="Website">Website</label>
<label><input type="checkbox" id="type-Email" rel="Email">Email</label>
<label><input type="checkbox" id="type-Branding" rel="Branding">Branding</label>
<h3>sector</h3>
<label><input type="checkbox" id="type-Automotive" rel="Automotive">Automotive</label>
<label><input type="checkbox" id="type-Property" rel="Property">Property</label>
</div>

Я все еще хотел бы сохранить флажки в иерархическом порядке, как в примере выше, но заголовки в тегах h3 являются родительскими терминами, и я не хочу, чтобы они были флажками, как мне все это сделать? 🙂

2

Решение

Может быть, вы можете использовать get_categories() вместо wp_list_categories(),

Сначала вы получаете категории верхнего уровня, используя parent => 0 и показать название категории в теге h3. Тогда вы можете получить дочерние категории, используя parent => $category->term_id и показать флажки.

Используйте что-то вроде примера ниже:

$args = array(
'taxonomy'      => 'tags',
'parent'        => 0, // get top level categories
'orderby'       => 'name',
'order'         => 'ASC',
'hierarchical'  => 1,
'pad_counts'    => 0
);

$categories = get_categories( $args );

foreach ( $categories as $category ){

echo '<h3>'. $category->name . '</h3>';

$sub_args = array(
'taxonomy'      => 'tags',
'parent'        => $category->term_id, // get child categories
'orderby'       => 'name',
'order'         => 'ASC',
'hierarchical'  => 1,
'pad_counts'    => 0
);

$sub_categories = get_categories( $sub_args );

foreach ( $sub_categories as $sub_category ){

echo '<label><input type="checkbox" id="type-'. $sub_category->name . '" rel="'. $sub_category->name . '">'. $sub_category->name . '</label>';

}

}
7

Другие решения

ты можешь использовать wp_category_checklist() как это:

<form>
<?php

$args = array(
'descendants_and_self'  => 0,
'selected_cats'         => false,
'popular_cats'          => false,
'walker'                => null,
'taxonomy'              => 'tags',
'checked_ontop'         => true
);

wp_terms_checklist( 0, $args );

?>
<input type="submit" value="Submit">
</form>

для получения дополнительной помощи:
https://developer.wordpress.org/reference/functions/wp_terms_checklist/

0