这实际上是一个很有趣的问题。是的this answer 昨晚,它获得了所有分类法的列表,以及属于该特定分类法的术语列表。其中的代码可以很容易地调整为要执行的操作。
我也尝试了其他方法,在谷歌上搜索想法,我从frankiejarrett.com. 为什么不创建自己的下拉函数,如wp_dropdown_categories
, 这对我来说很有意义
这是Frankie解释的
Method #2
这就是方法#2的用武之地。我们必须编写自己的自定义函数来生成下拉列表,以便可以将每个选项值作为slug输出:
下面是自定义下拉函数的函数,用于列出您的术语
function fjarrett_custom_taxonomy_dropdown( $taxonomy ) {
$terms = get_terms( $taxonomy );
if ( $terms ) {
printf( \'<select name="%s" class="postform">\', esc_attr( $taxonomy ) );
foreach ( $terms as $term ) {
printf( \'<option value="%s">%s</option>\', esc_attr( $term->slug ), esc_html( $term->name ) );
}
print( \'</select>\' );
}
}
现在可以在模板中调用它,如
<?php fjarrett_custom_taxonomy_dropdown( \'my_custom_taxonomy\' ); ?>
他进一步做了更全面的工作
Expansions on Method #2
如果您是一名编码摇滚明星,您可以通过为更多参数腾出空间来进一步采用方法#2。这将为您提供更多的控制,使其功能更像wp\\u dropdown\\u categories:
function fjarrett_custom_taxonomy_dropdown( $taxonomy, $orderby = \'date\', $order = \'DESC\', $limit = \'-1\', $name, $show_option_all = null, $show_option_none = null ) {
$args = array(
\'orderby\' => $orderby,
\'order\' => $order,
\'number\' => $limit,
);
$terms = get_terms( $taxonomy, $args );
$name = ( $name ) ? $name : $taxonomy;
if ( $terms ) {
printf( \'<select name="%s" class="postform">\', esc_attr( $name ) );
if ( $show_option_all ) {
printf( \'<option value="0">%s</option>\', esc_html( $show_option_all ) );
}
if ( $show_option_none ) {
printf( \'<option value="-1">%s</option>\', esc_html( $show_option_none ) );
}
foreach ( $terms as $term ) {
printf( \'<option value="%s">%s</option>\', esc_attr( $term->slug ), esc_html( $term->name ) );
}
print( \'</select>\' );
}
}
您可以将其作为
<?php fjarrett_custom_taxonomy_dropdown( \'my_custom_taxonomy\', \'date\', \'DESC\', \'5\', \'my_custom_taxonomy\', \'Select All\', \'Select None\' ); ?>
我希望所有这些都有助于实现你的目标
EDIT
要获得一个术语的子项,您应该使用
get_term_children
. 我修改了示例中的代码,使其在下拉列表中工作
<form action="<?php bloginfo(\'url\'); ?>/" method="get">
<?php
$term_id = 118;
$taxonomy_name = \'event_cat\';
$termchildren = get_term_children( $term_id, $taxonomy_name );
echo \'<select name="\' . $taxonomy_name . \'" onchange="this.form.submit()">\';
echo \'<option selected>All terms in \' . $taxonomy_name . \'</option>\';
foreach ( $termchildren as $child ) {
$term = get_term_by( \'id\', $child, $taxonomy_name );
$link = get_term_link( $term, $taxonomy_name );
echo \'<option value="\'.$term->slug.\'"><a href="\' .esc_url( $link ) . \'">\' . $term->name . \'</a></option>\';
}
echo \'</select>\';
?>
<noscript><div><input type="submit" value="View" /></div></noscript>
</form>