我目前正在使用此代码在分层分类中显示最终的子代。例如,标记为20世纪的帖子> 20世纪90年代> 1994年应该最终只显示1994年。
以下代码适用于大多数父/子组,但以0结尾且子级为0的代码除外。例如,20世纪> 20世纪90年代> 1990年产出1990年(而不是1990年)。
我认为问题是array()使用输出20xxxx,1990,1990x的字母数字方法。因此,认为最后的孩子是20世纪90年代(而非1990年)。
有没有办法忽略数组中的字母?或者是否有比array()更好的使用顺序?
<?php
$terms = get_the_terms( $post->ID, 'From' );
if ( !empty( $terms ) ) {
$output = array();
foreach ( $terms as $term ){
if( 0 != $term->parent )
$output[] = '<a href="' . get_term_link( $term ) .'">' . $term->name . '</a>';
}
if( count( $output ) )
echo '<p><b>' . __('','From') . '</b> ' . end($output) . '</p>';
}
?>
如果您需要,您也可以在这里预览我的网站:dev.jamesoclaire.com第一篇文章显示“2010s”,而不应该显示“2010”
答案 0 :(得分:0)
您可以使用explode
来展开由>
分隔的每个项目,以将它们放入数组中。然后,您可以使用array_pop
来获取数组的最后一项。
最后,如有必要,您可以过滤掉字符串中不希望包含的字符。
$string = '20th Century > 1990s > 1994';
// EXPLODE THE ITEMS AT THE GREATER THAN SIGN
$timeline_items = explode('>', $string);
// POP THE LAST ITEM OFF OF THE ARRAY AND STORE IT IN A VARIABLE
$last_item = trim(array_pop($timeline_items));
要直接回答您的问题,您可以使用正则表达式删除任何非数字字符。
$string = preg_replace('/[^0-9 >]/i', '', $string);
但这可能无法满足您的需求。例如:
$string = '20th Century > 1990s > 1994';
$string = preg_replace('/[^0-9 >]/i', '', $string);
print $string;
会给你:
20 > 1990 > 1994
答案 1 :(得分:0)
一位朋友帮我意识到我不幸提出了错误的问题。我需要做的是在运行get_the_terms时选择正确的术语。由于我只想显示年份,因此我排除了任何长度不超过4个字符的$term->name
。
<?php
$terms = get_the_terms( $post->ID, 'From' );
if ( !empty( $terms ) ) {
foreach ( $terms as $term ){
if( ( 0 != $term->parent ) and ( strlen($term->name) == 4 ) )
$output = '<a href="' . get_term_link( $term ) .'">' . $term->name . '</a>';
}
if ( !empty( $output ) )
echo '<p><b>' . __('','From') . '</b> ' . $output . '</p>';
}
?>