0

我目前正在使用此代码在分层分类中显示最后一个孩子。例如,标记为 20th Century > 1990s > 1994 的帖子最终应该只显示 1994。

下面的代码适用于大多数父/子组,除了以 0 结尾且子组为 0 的组。例如,20th Century > 1990s > 1990 输出 1990s(而不是 1990)。

我认为问题在于 array() 使用的是输出 20xxxx、1990、1990x 的字母数字方法。因此认为最后一个孩子是 1990 年代(不是 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”

4

2 回答 2

0

一位朋友帮助我意识到我不幸问错了问题。我需要做的是在运行 get_the_terms 时选择正确的术语。因为我只想显示年份,所以我排除了任何$term->name不是 4 个字符长的内容。

<?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>';
}
?>
于 2014-02-14T07:23:53.107 回答
0

您可以使用explode分解由 a 分隔的每个项目>以将它们放入数组中。然后你可以array_pop用来获取数组的最后一项。

http://us3.php.net/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
于 2014-02-13T21:49:25.627 回答