我有一个分层自定义分类法(“照片”),有3个父术语
颜色、位置、年份每个父术语都有几个子术语。我将“照片”分类法与页面相关联,并用每个页面的相关术语标记了一组页面。
例如,一页包含以下术语:
红色(“颜色”的子项)sf(“位置”的子项)2010(“年份”的子项)我想做的是使用某种条件标记来显示如下术语:
- Color: 红色Location: 旧金山Year: 2010年
术语链接。
我试图设置一个条件has_term
但我不知道如何从数组中回显术语:
<strong>Color:</strong> <?php if( has_term( array( \'red\', \'blue\', \'green\' ), \'photos\' ) ) {
// do something here
}
?>
该代码检查三个术语(“红色”、“蓝色”、“绿色”)中的任何一个是否与该页面相关联,并且可以很好地测试该术语。我只是不知道如何回应这个活跃的术语。
我总是可以为现在的父级术语(“颜色”、“位置”和“年份”)创建分类法,但如果没有单独的分类法,还有其他方法可以做到这一点,那就太好了。
如有任何建议,将不胜感激。
SO网友:gmazzap
以下代码为not 已测试,但应能正常工作:
在里面functions.php
放
function page_photos_terms($post_id = 0) {
echo get_color_location_year($post_id, \'photos\');
}
function get_color_location_year($post_id = 0, $taxonomy = \'photos\') {
if ( ! $post_id ) return \'\';
$color = null;
$location = null;
$year = null;
$out = array();
$out_str = \'\';
$ancestors = get_terms($taxonomy, array(\'parent\' => 0) );
if ( empty($ancestors) || is_wp_error($ancestors) ) return \'\';
foreach ($ancestors as $ancestor ) {
if ( $ancestor->slug == \'color\') { $color = $ancestor; }
if ( $ancestor->slug == \'location\') { $location = $ancestor; }
if ( $ancestor->slug == \'year\') { $year = $ancestor; }
}
$terms = get_the_terms( $post_id, $taxonomy );
if ( empty($terms ) || is_wp_error($terms) ) return \'\';
foreach ( $terms as $term ) {
if ( $color && ($term->parent == $color->term_id) ) {
$out[\'color\'][] = $term->name;
} elseif( $location && ($term->parent == $location->term_id) ) {
$out[\'location\'][] = $term->name;
} elseif( $year && ($term->parent == $year->term_id ) ) {
$out[\'year\'][] = $term->name;
}
}
foreach ( array(\'color\', \'location\', \'year\') as $p ) {
if ( ! empty($out[$p]) && is_object($$p) ) {
$out_str .= sprintf(\'<li><strong>%s</strong>: \', $$p->name );
$out_str .= implode(\', \', $out[$p]) . \'</li>\';
}
}
if ( $out_str != \'\' ) $out_str = \'<ul class="photos-meta">\' . $out_str . \'</ul>\';
return $out_str;
}
在中
page.php
(或您需要的任何地方)放置:
page_photos_terms( get_the_id() );
该函数可用于支持照片分类的所有帖子类型。
它甚至可以在循环之外工作(传递页面/帖子id),即使页面/帖子上有多种颜色(或年份或位置)。
希望有帮助。
SO网友:Tessa
在PHP中尝试类似的内容?我相信它可以进一步优化。
$terms = get_the_terms($post_id, \'photos\');//Get the \'photos\' terms for just this page
if($terms) {
//Loop through each term
foreach( $terms as $term ) {
//Check if the term has a parent
if($term->parent != 0) {
//Check if the parent term is one you want to include (color, location, and year)
$parent = get_term($term->parent, \'photos\');
if($parent->slug == \'color\' || $parent->slug == \'location\' || $parent->slug == \'year\') {
//Echo out the parent\'s name followed by the term\'s name
echo(\'<strong>\'.$parent->name.\':</strong> \'.$term->name);
}
}
}
}
使用此选项,您应该能够渲染指定的任何术语,这些术语的父级为颜色、位置或年份。如果您添加或删除术语(如添加黄色),那么这将非常有用,现在您不必更新代码,因为它检查的是父级的slug,而不是特定的颜色。