限制来自<! - ?php the_tags? - >的字符

时间:2010-07-06 14:24:33

标签: php wordpress

我有一个必须水平显示标签的布局。我希望能够限制输出的字符数量。

示例 - 如果我将限制设置为14,则应该发生以下情况。

原文:Cats, Dogs, Rain
新输出:Cats, Dogs, Ra..

请注意<?php the_tags ?>返回一个数组。这是我想要的一切,我想要限制为14个字符。

更新 为了消除任何混淆,我用一个屏幕截图更新了帖子,显示了我想设置此限制的原因。这应该使我更清楚我正在寻找什么样的解决方案alt text http://img686.imageshack.us/img686/2253/linit.png

5 个答案:

答案 0 :(得分:4)

substr

查看http://www.php.net/manual/en/function.substr.php

这样的事情对你有用:

$tags = implode(', ', $the_tags)
echo substr($tags, 0, 14) . (strlen($tags) > 14) ? '..' : '';

substr只会显示14个字符,然后最后一部分会在需要时附加..

答案 1 :(得分:1)

如何使用substr功能:

$string_new = substr($string, 0, 14);
echo $string_new;

如果你的文字之间有html标签,你可能还想使用strip_tags功能。

答案 2 :(得分:0)

在中间剪切单词并不是很漂亮 此函数会在单词结尾处删除您的短语,但不会更长指定长度。

function short($txt,$length)
{
    $txt = trim(strip_tags($txt));
    if(strlen($txt) > $length)
    {
        $txt = substr($txt,0,$length);
        $pos = strrpos($txt, " ");
        $txt = substr($txt,0,$pos);
        $txt .= "...";
    }
    return $txt;
}

但之前的所有答案都是正确的。

答案 3 :(得分:0)

所有这些答案的问题在于,the_tags()还没有明确指出 HTML链接数组

运行substr(implode(', ', get_the_tags(), X)可能会返回类似的内容;

<a href="/tag1/">Tag 1</a>, <a href="/tag2/">Tag 2</a>, <a href="/tag3

选择CSS /前端解决方案会更好(正如@Gumbo在原始评论中提到的那样)。

这样,你仍然会标记你的链接汁和可访问性,但不会出现类似的结果;

<a href="/keyword-tag/">Keyword Tag</a>, <a href="/awesome-keyword/">Awes...</a>

答案 4 :(得分:0)

这应该真正重建the_tagsget_the_tag_listget_the_term_list的整个链,但这是单个函数中的解决方案。

它基于get_the_term_list中的WordPress'wp-includes/category-template.php函数。

如果未指定trim_length,则将其移至the_tags。 HTML实体被解码,因此字符串计数将是准确的,然后重新编码到输出字符串中。

我在上一个$before过滤器中对$sep$afterthe_tags的需求并不完全清楚,所以我推迟了WordPress已在那里做的事情。

function the_tags_trimmed( $before = null, $sep = ', ', $after = '', $trim_length = -1, $trim_characters = '...' ) {
    if ( $trim_length < 1 )
        return the_tags( $before, $sep, $after );

    if ( null === $before )
        $before = __('Tags: ');

    $tags = get_the_terms( 0, 'post_tag' );

    if ( empty( $tags ) )
        return false;

    $html_length = 0;
    $x = 0;

    foreach ( $tags as $tag ) {
        $link = get_term_link( $tag, 'post_tag' );
        if ( is_wp_error( $link ) )
            return $link;
        $tag->name = html_entity_decode( $tag->name );
        if ( strlen($tag->name) + $html_length > $trim_length )
            $tag->name = substr( $tag->name, 0, $trim_length - $html_length) . $trim_characters;
        $tag_links[] = '<a href="' . $link . '" rel="tag">' . htmlentities($tag->name) . '</a>';
        $html_length += strlen($tag->name);
        if ( $x++ < count( $tags ) - 1 )
            $html_length += strlen( $sep );

        if ( $html_length >= $trim_length )
            break;
    }

    $tag_links = apply_filters( "term_links-post_tag", $tag_links );
    $tag_list = $before . join( $sep, $tag_links ) . $after;
    echo apply_filters( 'the_tags', $tag_list, $before, $sep, $after );
}

这是经过轻微测试的,应该完成@Thomas的要求。