Login-Name des Autoren verschlüsseln

Klaus stört es das der Login-Name des Autors bei den Post-Metadaten im Link erscheint. Das ist jetzt etwas schwurbelig ausgedrückt, für eine genauere Erklärung einfach beim Klaus nachlesen was er meint.

Manchmal bin ich pingelig und mich stört so etwas auch. Logindaten egal welcher Art haben in Links und anderen öffentlich zugänglichen Bereichen einfach nichts zu suchen. Das widerspricht auch der Idee das man neben den Login-Namen auch noch zwei andere Namen in seinem Profil angeben kann und auswählen kann welchen Namen man gerne öffentlich verwenden möchte.

Der Workaround

Um das Problem zu lösen gibt es einen Workaround und eine Möglichkeit mit Filtern zu arbeiten. Zuerst der Workaround. WordPress bietet nämlich die Möglichkeit für jeden Autoren eine eigene Autoren-Seite anzulegen. Dieses Template wird zuerst gezogen bevor das allgemeine Template für alle anderen Autoren verwendet wird. Anders ausgedrückt: Existiert für den Autor X ein spezielles Template, wird dieses verwendet. Existiert kein solches Template, dann wird das allgemeine Template verwendet.
Dabei sucht WordPress in folgender Reihenfolge nach einem passenden Template:

  1. author-{autor-name}.php
  2. author-{autor-ID}.php
  3. author.php

Ist der Login-Name des Autoren z.B. “Klaus” und existiert ein Template author-klaus.php, wird zuerst dieses Template verwendet. Dies hilft uns in diesem Fall jedoch nicht weiter, da weiterhin der Login-Name verwendet wird.
Jedoch kann man auch die ID des Autoren verwenden. Existiert ein Template author-12.php und hat der Autor “Klaus” die ID 12, dann wird dieses Template verwendet. Ändert noch nichts daran das im Link immer noch der Login-Name erscheint.
Um dies zu ändern, greift man in das Template ein in dem die Funktion get_author_posts_url() verwendet wird. Das ist von Theme zu Theme leider immer etwas unterschiedlich, je nach dem wo die Metadaten zum Post ausgegeben werden. Diesen Funktionsaufruf ersetzt man nun mit diesem Monster:

str_replace(
  get_the_author_meta( 'user_nicename' ),
  get_the_author_meta( 'ID' ),
  get_author_posts_url( get_the_author_meta( 'ID' ) )
)

Damit ersetzt man den Login-Namen (user_nicename) durch die ID des Autoren. Nun benötigt man noch ein Template author-xy.php wobei xy die jeweilige ID des Autoren ist.

Das ganze ist ein Workaround der nur sehr begrenzt einsatzfähig ist. Man muss jedes mal am Theme rumfummeln, die ganze Sache ist nicht wirklich übersichtlich und am Ende benötigt man auch noch für jeden Autoren ein eigenes Template. Eignet sich also normalerweise nur für Blogs in denen es 1-2 Autoren gibt und die eher selten ihr Theme wechseln.

1 Trackbacks

  1. [...] Ralf hat in seinem Blog auch noch etwas lesenswertes dazu geschrieben. Kategorie: WordPress Schlagworte: loginname, sicherheitslücke, WordPress. ← WP 3.1 – Sicherheitslücke durch Gestaltungsmöglichkeit WP 3 – comment_form() Gestaltung und Ausgabe → [...]

Ein Kommentar

  1. Hi Ralf,

    ein lesenswertes Artikel! :)
    Dazu hab ich meinen Artikel gleich mal durch eine Zeile und einen Link hierher ergänzt.

    Gruß
    Klaus

    Veröffentlicht 11. März 2011 am 15:28 | Permalink