我有一个必须水平显示标签的布局。我希望能够限制输出的字符数量。
示例 - 如果我将限制设置为14,则应该发生以下情况。
原文:Cats, Dogs, Rain
新输出:Cats, Dogs, Ra..
请注意<?php the_tags ?>
返回一个数组。这是我想要的一切,我想要限制为14个字符。
更新 为了消除任何混淆,我用一个屏幕截图更新了帖子,显示了我想设置此限制的原因。这应该使我更清楚我正在寻找什么样的解决方案alt text http://img686.imageshack.us/img686/2253/linit.png
答案 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_tags
,get_the_tag_list
和get_the_term_list
的整个链,但这是单个函数中的解决方案。
它基于get_the_term_list
中的WordPress'wp-includes/category-template.php
函数。
如果未指定trim_length,则将其移至the_tags
。 HTML实体被解码,因此字符串计数将是准确的,然后重新编码到输出字符串中。
我在上一个$before
过滤器中对$sep
,$after
和the_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的要求。