Legen Sie die maximale Titellänge fest – ähnlich der Ausschnittlänge außerhalb von single.php

Ich habe nach einem Code-Snippet gesucht, mit dem ich die Titellänge ähnlich wie mit the_excerpt begrenzen kann und dann einfach “(…)” anzeigen, wenn der Titel zu lang ist. Ich würde das gerne in Loops außerhalb von single.php verwenden, zB in meiner Sidebar, wo ein extrem langer Titel das Layout beschädigen würde.

Alles, was ich finden konnte, war dieses Code-Snippet, aber das ist offensichtlich nicht das, was ich will.

function maxWord($title) { global $post; $title = $post->post_title; if (str_word_count($title) >= 10 ) //set this to the maximum number of words wp_die( __('Error: your post title is over the maximum word count.') ); } add_action('publish_post', 'maxWord'); 

Ist es überhaupt möglich?

Ich suche nach etwas ähnlichem, nur nicht nach dem Auszug, sondern nach dem Titel:

 function excerpt($limit) { $excerpt = explode(' ', get_the_excerpt(), $limit); if (count($excerpt)>=$limit) { array_pop($excerpt); $excerpt = implode(" ",$excerpt).' (...)'; } else { $excerpt = implode(" ",$excerpt); } $excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt); return $excerpt; } function content($limit) { $content = explode(' ', get_the_content(), $limit); if (count($content)>=$limit) { array_pop($content); $content = implode(" ",$content).' (...)'; } else { $content = implode(" ",$content); } $content = preg_replace('/\[.+\]/','', $content); $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); return $content; } 

Solutions Collecting From Web of "Legen Sie die maximale Titellänge fest – ähnlich der Ausschnittlänge außerhalb von single.php"

Dies hängt zu 100% davon ab, wie Sie den Titel erhalten. Wenn du ein globales Objekt verwendest ( $post->post_title dann $post->post_title du es nicht durch irgendwelche Filter und du musst einige raffinierte Nachbearbeitung verwenden, um den Titel zu verkleinern.

Wenn Sie sich jedoch in einer Post-Schleife befinden, verwenden Sie entweder the_title() , um den Titel des aktuellen Beitrags zu get_the_title() oder get_the_title() , um ihn programmatisch zurückzugeben.

Wenn Sie eine dieser beiden functionen verwenden, übergibt WordPress den Posttitel automatisch über einen Filter, bevor er Ihnen zurückgegeben wird.

Dann können Sie oben in Ihrer sidebar.php Datei folgendes hinzufügen:

 function japanworm_shorten_title( $title ) { $newTitle = substr( $title, 0, 20 ); // Only take the first 20 characters return $newTitle . " …" // Append the elipsis to the text (...) } add_filter( 'the_title', 'japanworm_shorten_title', 10, 1 ); 

Jedes Mal, wenn Sie in Ihrer Seitenleiste auf the_title() oder get_the_title() , geben sie anstelle der Vollversion die automatisch gekürzte Version zurück.

sidebar.php Sie daran, diesen Filter am Ende Ihrer sidebar.php Datei zu entfernen oder er wird auch an anderer Stelle in Ihrem Thema sidebar.php :

 remove_filter( 'the_title', 'japanworm_shorten_title' ); 

Update 10.3.2011

Wenn Sie eine function verwenden möchten, die Sie überall verwenden können, empfehle ich, eigene Versionen von get_the_title() und the_title() und sie in Ihrem Code zu verwenden. Beispielsweise:

 function japanworm_get_the_title( $length = null, $id = 0 ) { $post = &get_post($id); $title = isset($post->post_title) ? $post->post_title : ''; $id = isset($post->ID) ? $post->ID : (int) $id; if ( !is_admin() ) { if ( !empty($post->post_password) ) { $protected_title_format = apply_filters('protected_title_format', __('Protected: %s')); $title = sprintf($protected_title_format, $title); } else if ( isset($post->post_status) && 'private' == $post->post_status ) { $private_title_format = apply_filters('private_title_format', __('Private: %s')); $title = sprintf($private_title_format, $title); } } // Shorten the title if ( null != $length ) { $length = (int) $length; $title = substr( $title, 0, $length ); // Only take the first 20 characters $title .= " …"; } return apply_filters( 'the_title', $title, $id ); } function japanworm_the_title($before = '', $after = '', $echo = true, $length = null) { $title = get_the_title($length); if ( strlen($title) == 0 ) return; $title = $before . $title . $after; if ( $echo ) echo $title; else return $title; } 

Diese werden von den ursprünglichen functionen the_title() und get_the_title() kopiert, so dass sie in der Schleife auf die gleiche Weise funktionieren sollten . Ich habe das jedoch nicht getestet.

Sie können die function wp_trim_excerpt () verwenden.

Wenn Sie ein Zeichenlimit angeben möchten, sollten Sie den excerpt_length- Filter verwenden können.

 < ?php echo wp_trim_excerpt( get_the_title() ); ?> 

WordPress-API-Lösung

Wenn Sie nur Englisch oder Nur-Zeichen-Sprache substring möchten, wäre die Verwendung von substring der richtige Weg. Wenn Sie jedoch die Sprache wie Chinesisch , Japanisch oder andere Sprachen zuschneiden möchten, ist die Verwendung von Teilzeichenfolgen möglicherweise schrecklich, da sie Unicode zur Darstellung verwenden.

Die Verwendung von wp_trim_words () wäre ein einfacher und direkter Weg, um Ihr Problem zu lösen.

 wp_trim_words( $text, $num_words = 55, $more = null ); 

ps inspiriert von Leo Caseiro.

CSS einzige Lösung

Wenn Sie herausfinden möchten, wie Sie die Wörter besonders im Responsive Design dynamisch trimmen, sollten Sie CSS wie folgt verwenden:

 .card-title { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }