Viele kennen das Problem: Die Titel in Wordpress sind zu lang und deswegen sieht es in der Hauptübersicht irgendwie blöd aus, wenn ein Titel über 2 Reihen geht. In der Einzelansicht sieht es wiederum gut aus. Den Titel zu verkürzen kommt oft nicht in Frage, oder geht meistens auch nicht. Für alle die, die vor dem gleichen Problem stehen wie ich aktuell mit meinem neuen Projekt www.appkatalog.de. Hier ist dieses Thema natürlich noch viel wichtiger, da es ein sogenanntes Gallery-Theme ist und ich 2 Artikel immer nebeneinander angeordnet habe. Hier dürften die Titel theoretisch wenn ich keinen Umbruch will nur 31 Zeichen lang sein. Das ist eindeutig zu wenig!
Die Theorie
Damit dies auch jeder mit nur ein wenig PHP Kenntnissen versteht fangen wir mit der Theorie an. Zuerst müssten wir überprüfen welche Länge der Titel in Wordpress hat. Hierfür können wir die Wordpress-Funktion the_title() nicht verwenden, da sie direkt den Titel ausgibt. Wir brauchen hierfür also get_the_title(). Diese Funktion können wir ganz einfach einer Variablen (in meinem Fall $titel) zuweisen:
$titel = get_the_title();
Dies muss auf jeden Fall nach dem While-Befehl stehen
while (have_posts()) : the_post();
da wir ja den Titel jedes einzelnen Beitrags haben wollen.
Nun haben wir den Titel einer Variable zugeordnet und können ihn auf seine Länge überprüfen. Dies machen wir mit dem PHP-Befehl strlen. Der Befehl sieht dann so aus:
if (strlen($titel) > 31) {
31 ist hier die maximal geeignete Zeichenzahl vor einem Umbruch. Dieser Wert ist natürlich für jedes Theme individuell und muss ganz einfach ausprobiert werden.
Wenn unser $titel nun länger ist als 31 Zeichen soll er abgeschnitten werden. Dies erreichen wir mit dem PHP-Befehl substr. Hier wird der $titel von Zeichen 0 bis 28 ausgegeben:
echo substr($titel, 0, 28);
Nun würde es doch sehr blöd aussehen, wenn der Titel einfach abgeschnitten wäre. Deswegen setzen wir noch drei Punkte dahinter. Dies erreichen wir mit:
echo “…”;
}
Mit dem Titel von 0 bis 28 Zeichen und den 3 Punkten kommen wir also wieder auf die Maximale Zeichenanzahl von 31.
Wenn wir nun einen Titel haben der kürzer oder gleich viele Zeichen wie 31 hat soll dieser normal ausgegeben werden. Dies erreichen wir mit
else {
echo $titel;
}
oder auch
else {
the_title();
}
Die Praxis
Nun zeige ich euch, wie ihr das ganze hier einbauen könnt. In eurer index.php sucht ihr nach der Titel-Ausgabe <?php the_title(); ?> und ersetzt sie mit folgendem Code:
<?php
$titel = get_the_title();
if (strlen($titel) > 31) {
echo substr($titel, 0, 28);
echo “…”;
}
else {
echo “$titel”;
} ?>
Nun doch einfacher, als es sich in der Theorie angehört hat, oder?
Alternative
Eine sehr gute Alternative von gr4y ist außerdem das ganze in die functions.php des Themes zu packen und daraus einfach eine neue Titel-Funktion zu bauen. Der Code sieht dann folgendermaßen aus:
function shortTitle($the_title){
if (strlen($the_title) > 31)
return substr($the_title, 0, 28).’…’;
else
return $the_title;
}
add_filter ( ‘the_title’, ’shortTitle’) ;
Danke dafür!
echo (strlen(get_the_title() > 31) ? substr(get_the_title(), 0, 28) . ‘…’ : get_the_title();
Man kann es sich auch unnötig kompliziert machen.
geschrieben von Robert Curth - 1. August 2009 13:41
Aua! Das geht doch alles viel einfacher und vor allem schöner.
Einfach den folgenden Code in deine functions.php des Themes und fertig!
function shortTitle($the_title){
if (strlen($the_title) > 31)
return substr($the_title, 0, 28).”…”;
else
return $the_title;
}
add_filter ( ‘the_title’, ’shortTitle’ );
Macht das gleiche und ist meiner Meinung nach ein bisschen flexibler da du den Code nur noch ein einer Stelle ändern musst und nicht an mehreren.
geschrieben von gr4y - 1. August 2009 13:46
danke an euch. meins war eher ne quick and dirty lösung
geschrieben von Julian - 1. August 2009 13:48
Super Lösung. Bei mir steht “Warning: Missing Argument in …/functions.php”, wenn ich die Alternative nutze. In meiner Sidebar steht statt “the_title sinngemäß “shortTitle”. Allerdings frage ich mich gerade, wie man die ersten Zeichen vor einem – abschneiden kann, wenn die maximale Anzahl erreicht ist.
geschrieben von STB - 9. August 2009 23:14
In der Sidebar muss the_title bleiben. Die letzte Zeile add_filter ( ‘the_title’, ’shortTitle’ );
filtert alle the_title raus und macht ein shortTitle daraus.
Deine zweite Frage verstehe ich nicht.
Gruß
geschrieben von Julian - 10. August 2009 13:25
@STB:
1. Was macht the_title(); in deiner Sidebar?
2. An deinem Theme musst du nichts ändern, außer der functions.php. Deswegen auch:
add_filter(’the_tile’,’shortTitle’);
Das bewirkt das alle Titel vor der Ausgabe nochmal durch shortTitle und eventuelle andere Funktionen gejagt werden und die Ausgabe dessen dann in deinem Theme erscheint.
Wenn du willst kannst du aber den Filter rauswerfen und statt the_title(); auch shortTitle(the_title()); schreiben. Wenn du zum Beispiel nur die Titel in der single.php abkürzen willst.
Und was meinst du mit dem “-” ? Das verstehe ich leider nicht ganz!
geschrieben von gr4y - 10. August 2009 13:36