Individuelle Anpassung der Titel und des Meta-Tags Description


Titel und Description individuell anpassen

Ein guter und passender Titel ist wichtig, doch nicht minder wichtig ist eine gute, aussagekräftige Description. Selbst wenn sich die Suchmaschinen nicht unbedingt an den vorgegeben Wortlaut halten, so rundet dennoch eine gute Kurzbeschreibung den eigentlichen Artikel erst richtig ab. Bei Veröffentlichungen im Web spielt weiterhin eine Rolle, wie wichtig der eigene Brand ist.
Die Möglichkeiten scheinen beim verwendeten Theme ein wenig unvollkommen zu sein oder geben sich, bedingt durch versteckte Optionen beim Dashboard von WP, nicht auf dem ersten Blick zu erkennen. Aus den erwähnten Gründen ergab als zusätzliche Aufgabenstellung bei der Einrichtung dieser Testseite, die Titel so gut wie möglich mit einem Brand zu kombinieren und die Ausgabe der Kurzbeschreibungen zu verbessern.
Dabei fiel als erstes auf, dass die Option “Auszug” beim Anlegen von statischen Seiten nicht auffindbar war. Wie sich herausstellte, dank dem WP Nachschlagewerk von www.texto.de, muss für eine Sichtbarmachung der Option erst einmal eine kleine Funktion geschrieben werden.

/**
 * Einblenden der Option Auszug im Dashbord zum Verfassen
 * einer Description für statische Seiten.
 */
function einblendenAuszugDesc() {

    add_post_type_support("page", "excerpt");
}
add_action("init", "einblendenAuszugDesc");

Diese Funktion muss in die Datei funktions.php von Twenty Twelve eingefügt werden. Es handelt sich dabei praktisch um die gleiche Funktion, wie die, die auf den Seiten von www.texto.de vorgestellt wird. Einziger Unterschied, dass für die Notierung die camelCase Schreibweise verwendet wurde, da diese sich bei PHP für Funktionen und Methoden durchzusetzen scheint. In den PHP Coding Standards von WordPress steht jedoch unter dem Punkt Naming Conventions in Klammern (never camelCase). Doch vielleicht lässt sich noch eine einheitliche Schreibweise für Bezeichner als Standard finden, wie in Java oder sprachübergreifend bei den DOM-Methoden bereits geschehen.

Kleine Randbemerkung, bei Klassen sollte die CamelCase Notation verwendet werden, mit einem großen Anfangsbuchstaben. Einen Kommentar mit doppelten Sternchen in der ersten Zeile zu beginnen und vor jeder weiteren Zeile wieder ein Sternchen zu setzen, entspricht mehr den Richtlinien von PEAR. Mit der eigentlichen Funktionalität hat beides nichts zu tun, da PHP nicht zwischen Groß- und Kleinschreibung bei Bezeichnern für Funktionen, Methoden und Klasse unterscheidet, gleich ob diese mit Unterstrichen versehen sind oder nicht.

Doch zurück zum eigentlichen Thema. Um die Ausgabe der Titel und der Kurzbeschreibungen anpassungsfähiger zu gestalten zu gestalten, weiterhin um außer auf der Startseite einen Brand hinter den Titeln einzufügen, wurde in der header.php das vorhandene Titelelement entfernt, bzw. durch den nachfolgenden Code ersetzt.
Der größte Teil des Listings dürfte wohl selbsterklärend sein, mit Ausnahme des regulären Ausdrucks. Dieser muss dem verwendeten Format der URL angepasst werden. Das Beispiel im Listing bezieht sich auf URLs, wie sie sich bei der Einstellung “Numerisch” ergeben. Bei abweichenden Einstellungen für Permalinks würde der Ausdruck versagen, bzw. müsste entsprechend verändert werden. Beispiel für eine Einstellung Beitragsname:

Beispiel: www.example.com/2013/07
Regulärer Ausdruck: "/(.*?)(\d{4})\/(\d{2})([\/])/"

Daraus ergibt sich, dass die die gesuchten Teilausdrücke nicht mehr in $4 und $5
sondern in $2 und $3 gespeichert sind:

$arr_descr[(string) $schreibeum[3]]." des Jahres ".$schreibeum[2].".";

Weiterhin bleibt anzumerken, dass die anonyme Funktion bei function ($schreibeum) PHP in der Version > 5.3 voraussetzt. Ab der Version 5.2.4 läuft zwar Twenty Twelve, jedoch würde eine anonyme Funktion in der Callback-Funktion zu einem Fehler führen. Sollte dies der Fall sein, ist function auszuwechseln gegen create_funktion und der Inhalt wie ein String zu maskieren.

<?php
/**
 * Individuelle Anpassung der Titel und der Ausgabe des Meta-Tags Description beim
 * WordPress Theme Twenty Twelve, beginnend bei der Description für die Startseite.
 */
if (is_front_page()) {

    echo "<title>".esc_html(wp_title("|", false, "right"))."</title>\n".
    "<meta name=\"description\" content=\"Eine Description nur für die Startseite.\" />\n";
}
elseif (is_page() or is_single())  {

    echo "<title>".esc_html(get_the_title()).
    " | Coder-Welten.com</title>\n<meta name=\"description\" content=\"".
    esc_html(get_the_excerpt())."\" />\n";
}
elseif (is_category())  {
    $cate = get_the_category();

    echo "<title>Kategorie &raquo; ".esc_html($cate[0]->cat_name).
    " | Coder-Welten.com</title>\n<meta name=\"description\" ".
    "content=\"Sie befinden sich in der Kategorie ".
    esc_html($cate[0]->cat_name.": ".$cate[0]->description)."\" />\n";
    }
elseif (is_archive())  {
    /**
    Die Callback-Funktion bezieht sich auf ein URL-Format wie archive/date/2013/06
    und der reguläre Ausdruck müsste bei anderen Formaten entsprechend gekürzt oder
    angepasst werden.
    */
    $schreibeum = $_SERVER["REQUEST_URI"];
    $schreibeum = preg_replace_callback("/(.*?)(archive\/)(date\/)(\d{4})\/(\d{2})/",

    function ($schreibeum) {

        $arr_descr = array(

            "01" => "Januar",    "02" => "Februar",
            "03" => "März",      "04" => "April",
            "05" => "Mai",       "06" => "Juni",
            "07" => "Juli",      "08" => "August",
            "09" => "September", "10" => "Oktober",
            "11" => "November",  "12" => "Dezember"
        );
        $umgeschr = "Im Archiv befinden sich unsere Veröffentlichungen vom Monat ".
                    $arr_descr[(string) $schreibeum[5]]." des Jahres ".$schreibeum[4].".";
        return $umgeschr;

    }, $schreibeum);

    echo "<title>".esc_html(wp_title("&raquo;", false, "right")).
    " | Coder-Welten.com</title>\n<meta name=\"description\" content=\"".
    esc_html($schreibeum)."\" />\n";
}
else {
    echo "<title>".esc_html(wp_title("&raquo;", false, "right")).
    " | Coder-Welten.com</title>\n";
}
?>

Im Listing wurde die WordPress-Funktion esc_html verwendet, wobei als Alternative die Verwendung von esc_attr genügen sollte. Grundsätzlich sollte jedoch (in sehr vielen Beispielen wird darauf verzichtet) jede Ausgabe mit htmlspecialchars oder htmlentities abgesichert werden. Überall wo Benutzereingaben übernommen werden, am besten noch in Verbindung mit ENT_QUOTES. Bei WordPress stehen zusätzlich die beiden genannten Funktionen zur Verfügung, die intern ebenfalls ENT_QUOTES verwenden.

Abschließende Bemerkung: Für das Array wurde bewusst ein assoziatives Array mit Strings als Schlüssel gewählt, zumal numerische Werte keinen Vorteil mit sich gebracht hätten. Es wäre zwar möglich gewesen, ein einfaches Array zu verwenden, doch der beginnt bekanntlich bei Monat 0 mit der Zählung.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *