Truncating custom fields

时间:2011-03-03 作者:Zach Shallbetter

我正在使用自定义字段提取辅助描述。我想使用内置的WordPress truncate,但似乎无法理解。

$desc = get_post_meta($post->ID, "youtube-desc", true);
echo \'<p>\' . $desc . \'</p>\';
任何帮助都将不胜感激。

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

请参见discussion for Taxonomy Short Description 为了更好地缩短字符串。我不知道有一个WP函数可以正确地进行截断。

以下是我基于链接讨论的代码:

/**
 * Shortens an UTF-8 encoded string without breaking words.
 *
 * @param  string $string     string to shorten
 * @param  int    $max_chars  maximal length in characters
 * @param  string $append     replacement for truncated words.
 * @return string
 */
function utf8_truncate( $string, $max_chars = 200, $append = "\\xC2\\xA0…" )
{
    $string = strip_tags( $string );
    $string = html_entity_decode( $string, ENT_QUOTES, \'utf-8\' );
    // \\xC2\\xA0 is the no-break space
    $string = trim( $string, "\\n\\r\\t .-;–,—\\xC2\\xA0" );
    $length = strlen( utf8_decode( $string ) );

    // Nothing to do.
    if ( $length < $max_chars )
    {
        return $string;
    }

    // mb_substr() is in /wp-includes/compat.php as a fallback if
    // your the current PHP installation doesn’t have it.
    $string = mb_substr( $string, 0, $max_chars, \'utf-8\' );

    // No white space. One long word or chinese/korean/japanese text.
    if ( FALSE === strpos( $string, \' \' ) )
    {
        return $string . $append;
    }

    // Avoid breaks within words. Find the last white space.
    if ( extension_loaded( \'mbstring\' ) )
    {
        $pos   = mb_strrpos( $string, \' \', \'utf-8\' );
        $short = mb_substr( $string, 0, $pos, \'utf-8\' );
    }
    else
    {
        // Workaround. May be slow on long strings.
        $words = explode( \' \', $string );
        // Drop the last word.
        array_pop( $words );
        $short = implode( \' \', $words );
    }

    return $short . $append;
}

Test

print utf8_truncate( \'ööööö ööööö\' , 10 );
// prints \'ööööö …\'
将函数添加到functions.php 并将代码更改为:

echo \'<p>\' . utf8_truncate( $desc ) . \'</p>\';
您还可以使用它来缩短标题:

echo \'<h1>\' . utf8_truncate( get_the_title() ) . \'</h1>\';

结束

相关推荐

Encoding Method for URLs?

WordPress是否有一种编码URL的方法或API,类似于在URL中使用标题时生成部分URL的方式?我正在编写一个生成URL的插件,并希望使用与其他所有插件相同的方法。例如,我在标题中键入“这是我的博客文章”,然后生成“这是我的博客文章”。