JetPack: Permalink anstatt Shortlink für Publicize

Das PlugIn Jetpack von und für WordPress bietet mit dem Dienst Publicize eine einfache Möglichkeit, neue Artikel direkt auf Twitter oder in anderen sozialen Netzwerken zu veröffentlichen.

Jetpack

Symbolfoto: Ein JetPack.

Allerdings hat die Sache einen Haken: Nutzt man den wp.me Link-Shortener – der mit JetPack ebenfalls integriert wird – nicht, wird beim Veröffentlichen die hässliche ID-URL („Shortlink“) verwendet. WordPress hat extra eine Einstellung um festzulegen, wie die URL der Artikel aussehen soll. In meinem Fall: /Jahr/Monat/Postname.html

Normalerweise wird ein Artikel anhand der ID aufgerufen. Mit dieser ID findet WordPress den entsprechenden Artikel (in der entsprechenden Version) in der Datenbank. Allerdings ist das nicht SEO-Freundlich und sieht (für mich) hässlig aus: /?p=3141592

Jedenfalls kümmert sich JetPack nicht um die eigens eingerichteten schönen Permalinks, sondern nutzt sofort die hässlichen ID-Parameter-Links, falls die wp.me Funktionen deaktiviert sind.
Um die permalinks zu verwenden, gibt es 2 Methoden. Sie machen grundsätzlich das selbe, daher empfehle ich:

Methode 1: Plugin UsePermalinks

Das Plugin habe ich geschrieben. Jedes mal, wenn etwas in WordPress den ‚Shortlink‘ abfragt, bekommt es den Permalink zurückgeliefert.

Bis ich das Plugin bei wordpress.org eingetragen habe, könnt ihr es hier herunterladen: Download UsePermalinks.zip

md5sum: 5f485f9e907471fca5e4cd91dc7e6caf  usepermalinks.zip
sha1sum: ec85bbd9f2fc1dbff27929fd7b3d06509b3aef22  usepermalinks.zip

Methode 2: Die functions.php des Themes ändern

Die beiden Methoden machen exakt das selbe, nur dass man mit dem Plugin nicht die functions.php des Themes von Hand bearbeiten muss (wodurch die Änderungen bei der nächsten Aktualisierung wieder verfallen würden).
Ich nutze aktuell das Theme stripefolio, also bearbeite ich die /wp-content/themes/stripefolio/functions.php und füge folgendes am Ende ein:

/**
 * Return permalink instead of shortlink
 */
function stripefolio_get_shortlink() {
    global $post;

    if ( !$post )
        return;

    return get_permalink($post->ID);
}
add_filter( 'get_shortlink', 'stripefolio_get_shortlink' );

Der Name der Funktion kann natürlich beliebig geändert werden, und sollte auch an den Namen des Themes angepasst werden, um die Codex-Konventionen einzuhalten.

Das Plugin nutzt den gleichen Code. Ein Filter wird für get_shortlink hinzugefügt, die aufgerufene Funktion gibt nicht den Shortlink, sondern den Permalink wieder.
Um es etwas klarer zu sagen: Der ‚Shortlink‘ ist das, was ich ID-URL genannt habe. Ich habe es nicht ‚Shortlink‘ genannt, weil ein Shortlink für mich URLs sind, die durch einen Link-Shortener wie wp.me entstehen. Welchen Namen diese Links WordPress-Intern haben, weiß ich auch nicht.
Klar ist: Mit dieser Funktion wird nie wieder example.com/?p=3141592 wiedergegeben, sondern immer nur example.com/deine-link-struktur.html

Den Code habe ich übrigens nicht selbst erarbeitet. Ich hatte vor ca. 1 Monat nach einer Lösung für das Shortlink-Problem gesucht, allerdings erfolglos. Grund ist wohl, dass der Hook get_shortlink nicht im WP-Codex zu finden ist (zumindest nicht über die Plugin API Referenz, die normalerweise alle Hooks auflisten sollte…) Der Code stammt von Jeremy Herve, der auf ein Support-Ticket von mir geantwortet hat.

MfG
Damon Dransfeld

Dieser Eintrag wurde veröffentlicht in PHP
Bookmarken: Permanent-Link Schreibe einen Kommentar oder hinterlasse einen Trackback: Trackback-URL.

2 Kommentare

  1. mattsoks
    Erstellt am 29. Mai 2013 um 18:53 | Permalink zum Kommentar

    Hey!

    Just wanted to say thanks for this plugin! I was running into a problem with sharing via Jetpack, it was displaying ugly URL links containing the page ID instead of the user defined links, this plugin solved that issue and everything is functioning as desired. Great work and thanks for sharing!

    • Erstellt am 30. Mai 2013 um 04:15 | Permalink zum Kommentar

      Thanks for your feedback!
      All credits go to Jeremy Herve, who provided the actual code for this. I just packed it into a plugin.
      In my opinion, JetPack does some really nasty things… Its core is not very customizable, like there is no option for you to chose which URL should be shared. Also, there is invalid CSS and some functionalities increase page load times far more than I’d call it a benefit to my site.

      But aside from that, it’s a great framework which joins so many capabilities, we’d have to install dozens of plugins for that…

      Anyway, I’m happy that I could help you.
      (BTW: this is the first legitimate english comment on the German blog section, all 1200 other english comments are spam. Almost deleted that one :D)

Achtung: Wordpress interpretiert bestimmte Zeichenfolgen als Markup und verändert diese. Nutzt für Programmcode lieber Gist oder PasteBin-Services und verlinkt die Code-Schnipsel.

Post a Comment

Ihre E-Mail wird niemals veröffentlicht oder verteilt. Benötigte Felder sind mit * markiert

*
*

Du kannst diese HTML Tags und Attribute verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>