Benutzerdefinierte Felder abschneiden

7

Ich verwende benutzerdefinierte Felder, um eine sekundäre Beschreibung abzurufen. Ich möchte das eingebaute WordPress-Truncate verwenden, kann es aber nicht herausfinden.

$desc = get_post_meta($post->ID, "youtube-desc", true);
echo '<p>' . $desc . '</p>';

Jede Hilfe wäre dankbar.

Zach Shallbetter
quelle

Antworten:

11

In der Diskussion zur Taxonomie-Kurzbeschreibung finden Sie eine bessere Möglichkeit, eine Zeichenfolge zu kürzen. Mir ist keine WP-Funktion bekannt, bei der das Abschneiden richtig ist.

Hier ist mein Code basierend auf der verknüpften Diskussion:

/**
 * 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;
}

Prüfung

print utf8_truncate( 'ööööö ööööö' , 10 );
// prints 'ööööö …'

Fügen Sie die Funktion zu Ihrer hinzu functions.phpund ändern Sie Ihren Code in:

echo '<p>' . utf8_truncate( $desc ) . '</p>';

Sie können es auch verwenden, um einen Titel zu kürzen:

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