我在admin中创建了一个年龄选择菜单,它是根据age
. 分类法的层次结构如下:
18-25岁(父母,身份证183)18岁(子女)19岁(父母,身份证184)26-30岁(父母,身份证27我只想列出孩子(18、19等),不想列出父母(18-25、26-30等)。目前我正在使用get_terms
使用parent
参数,但它不接受超过1个家长ID。以下是我到目前为止的数据,显示了18-25岁的孩子。
$ages = get_terms( \'age\', array(
\'hide_empty\' => 0,
\'parent\' => \'183\',
));
以下是我希望它执行的操作,但不受支持。我也用一个数组尝试过,但也不起作用。
$ages = get_terms( \'age\', array(
\'hide_empty\' => 0,
\'parent\' => \'183,184\',
));
我看到有一个
get_term_children 函数,但我不确定如何使用它,因为它看起来也只接受一个值。在这个例子中,它会建立一个无序的列表,但我可以修改选择菜单。
<?php
$termID = 183;
$taxonomyName = "age";
$termchildren = get_term_children( $termID, $taxonomyName );
echo \'<ul>\';
foreach ($termchildren as $child) {
$term = get_term_by( \'id\', $child, $taxonomyName );
echo \'<li><a href="\' . get_term_link( $term->name, $taxonomyName ) . \'">\' . $term->name . \'</a></li>\';
}
echo \'</ul>\';
?>
最合适的回答,由SO网友:Manny Fleurmond 整理而成
这应该适合您:
$taxonomyName = "age";
//This gets top layer terms only. This is done by setting parent to 0.
$parent_terms = get_terms( $taxonomyName, array( \'parent\' => 0, \'orderby\' => \'slug\', \'hide_empty\' => false ) );
echo \'<ul>\';
foreach ( $parent_terms as $pterm ) {
//Get the Child terms
$terms = get_terms( $taxonomyName, array( \'parent\' => $pterm->term_id, \'orderby\' => \'slug\', \'hide_empty\' => false ) );
foreach ( $terms as $term ) {
echo \'<li><a href="\' . get_term_link( $term ) . \'">\' . $term->name . \'</a></li>\';
}
}
echo \'</ul>\';
SO网友:Pieter Goosen
我们可以通过使用terms_clauses
筛选以在SQL查询执行之前对其进行更改。这样我们就不需要在期末考试中跳过父母foreach
循环,因为它们不在返回的术语数组中,这为我们节省了不必要的工作和编码
您可以尝试以下操作:
add_filter( \'terms_clauses\', function ( $pieces, $taxonomies, $args )
{
// Check if our custom arguments is set and set to 1, if not bail
if ( !isset( $args[\'wpse_exclude_top\'] )
|| 1 !== $args[\'wpse_exclude_top\']
)
return $pieces;
// Everything checks out, lets remove parents
$pieces[\'where\'] .= \' AND tt.parent > 0\';
return $pieces;
}, 10, 3 );
要排除顶级家长,我们现在可以通过
\'wpse_exclude_top\' => 1
使用我们的参数数组。新的
wpse_exclude_top
上述筛选器支持参数
$terms = get_terms( \'category\', [\'wpse_exclude_top\' => 1] );
if ( $terms
&& !is_wp_error( $terms )
) {
echo \'<ul>\';
foreach ($terms as $term) {
echo \'<li><a href="\' . get_term_link( $term ) . \'">\' . $term->name . \'</a></li>\';
}
echo \'</ul>\';
}
只是一张便条,
get_term_link()
不接受术语名称、only、slug、ID或完整的术语对象。对于性能,始终将术语“对象”传递给
get_term_link()
如果术语对象可用(如本例所示)
SO网友:Jakir Hossain
如果显示多个父级的子级,可以尝试此操作。显示提及术语ID子术语。
$termIds = array(367, 366, 365, 364, 363, 362);
$taxonomyName = "age";
$args = array(
\'orderby\' => \'term_id\',
\'order\' => \'DESC\',
\'hide_empty\' => false,
\'childless\' => false,
);
$terms = get_terms( $taxonomyName, $args );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
$inc = 1;
foreach ( $terms as $term ) {
if (in_array($term->parent, $termIds)) {
echo \'<option value="\'.$term->term_id.\'"><font><font>\'.$term->name.\'</font></font></option>\';
}
}
}