Alternativer Langer Titel?

  • Während ich im Sidebar meine Pages über Kurzbegriffe anzeigen möchte ("About"), sollten sie auf der Page selber etwas sprechender sein ("About videoDB").
    Ich habe einen Filter gesucht, der es ermöglichen würde, den Page-Titel durch ein Custom Field mit der Langversion zu ersezten- konnte aber keinen finden. Die üblichen Verdächtigen wie the_title etc. ersezten jeweils auch den Namen im Sidebar.
    Gibt es einen entsprechenden Filter oder was hätte ich sonst noch für Möglichkeiten zur realisierung?

    Danke,
    Andi

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Danke für die schnelle Antwort. Allerdings ganz schön hässlich da man ständig die Source editieren muss- auch custom fields helfen an der Stelle wohl nicht :(

  • Das geht schon mit custom fields. Der Inhalt (Langversion des Titels) muss dann einfach anstelle von the_title() ausgegeben werden. Man kann den Filter auch an den passenden Stellen ein- und dann wieder ausschalten. Erfordert aber alles Änderungen im Theme selbst.

  • Klar- das Problem ist eher, dass ich bei wp_list_pages keine custom fields mehr abholen kann- das ist ja nur noch "text".

    Problem von the_title ist, dass es alle Titel gleichmässig betrifft. Habe in meinen Experimenten keinen gefunden, mit dem ich ausschliesslich den page Title hätte ändern können- oder kennst Du einen? Den Rest würde ich dann schon hinkriegen ;)

  • Ok, dann meine Ideen noch mal etwas ausführlicher :-D

    Custom Fields: Dort wird die Langversion des Titels eingegeben. Im Seitentemplate (page.php) wird dann anstelle von the_title() der Inhalt des zur Seite gehörenden Custom Fields ausgegeben.

    Filter: Funktioniert genau anders herum. Im Custom Field steht die Kurzversion. Die Filterfunktion für den Titel wird vor dem Aufruf von wp_list_pages() aktiviert und hinterher wieder ausgeschaltet. Die Filterfunktion gibt den Inhalt des Custom Fields anstelle des Titels zurück.

  • Ahhhh. Also:

    1) Template ändern:
    1a) Custom field aktivieren
    1b) wp_list_pages
    1c) Custom field deaktivieren

    2) Custom fields pflegen


    1a) lässt sich vmtl. über Konfigurationsoptionen setzen, mittels update_option?
    1b) d.h. ich muss mich wieder in the_title mit meinem Filter einklinken, oder?

    Hoffe ich hab's jetzt kapiert ;)

    Danke,
    Andi

  • Das sind zwei alternative Möglichkeiten :-)

    1. Variante:

    In der page.php (hier aus dem Defaulttheme, sollte aber in anderen ähnlich aussehen):

    PHP
    <h2><?php the_title(); ?></h2>

    ändern in:

    PHP
    <h2><?php echo get_post_meta($post->ID, 'langtitel', true); ?></h2>

    Das Plugin Rhymed Code » Custom Field GUI erleichtert die Eingabe der Langtitel. Dort in der conf.ini

    Code
    [langtitel]
    type = textfield

    einfügen.

    2. Variante:

    Das Plugin von oben, nur diesmal mit

    Code
    [kurztitel]
    type = textfield

    in der conf.ini

    Alle Aufrufe von

    PHP
    wp_list_pages(...)

    ersetzen durch

    PHP
    add_filter('the_title', 'short_titel'); 
    wp_list_pages(...)
    remove_filter('the_title', 'short_titel');

    Die Funktion short_titel in die functions.php des Themes oder als eigenes Plugin:

    PHP
    function short_titel () {
    global $post;
    return get_post_meta($post->ID, 'kurztitel', true);
    }

    Die zweite Variante hat den Vorteil, dass man den längeren Titel auch für die Permalinks, die Seitentitel usw. behält, nicht nur für die Überschrift.

    Alles ungetestet und ohne Gewähr :-D

    Einmal editiert, zuletzt von spickzettel (15. Februar 2008 um 11:21)

  • Variante 2 ist genau was ich suche- und Dein Support der beste den ich je hatte ;)

    Allerdings produziert der Code (debug mode) jetzt folgenden Output:

    Es scheint, als würde die post id nicht in der Schleife angepasst?

  • Mhhm. Kurzer Blick in den Code von wp_list_pages hat auch nciht geholfen- auch hier ändert sich die ID nicht:

    PHP
    global $wp_query;
            if ( is_page() )
                $current_page = $wp_query->get_queried_object_id();
  • Ok, die zweite Variante ist also Quatsch :-D Wir sind ja nicht im Loop und man kommt an die IDs der Seiten nicht ohne Weiteres ran.

    Bleibt noch die erste Variante.

    Oder man schreibt auf Basis der wp_list_pages eine völlig neue Funktion. Wenn ich Zeit habe, vielleicht nächste Woche...

  • Hi,

    Nur falls es jemandem hilft:

    Ich stand vor dem gleichen Problem und habe es mit der hier geschilderten 1. Variante lösen können. Vielen Dank übrigens dafür! Nun war es aber so, dass auf normalen Seiten, bei denen ich den kurzen Titel gerne behalten wollte standardmäßig gar kein Titel ausgegeben wurde, ich hätte also für jede Seite ein Custom Field definieren müssen. Da ich das nicht wollte, habe ich den Code der ersten Variante etwas modifiziert.

    So wird, wenn auf einer Seite ein Custom Field leer ist oder nicht existiert, der "kurze" Titel ausgegeben.

    Vielleicht hilft es ja jemandem.

    LG.

    Einmal editiert, zuletzt von user1220 (10. September 2011 um 19:42)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!