Theme und Plugins einer WordPress-Installation ermitteln

WordPress ist einer der meistgenutzten Content-Management-Systeme unserer Zeit. Wenn WordPress für die eigenen Webseiten und Projekte genutzt wird, kann es manchmal von Interesse sein herauszufinden, welche Themes und Plugins andere WordPress-Seiten nutzen. Mit Hilfe des WP-ThemeDetector ist genau so etwas möglich.

Neben dem Theme können auch genutzte Plugins ermittelt werden

Nach der Eingabe der gewünschten Ziel-URL, versucht der WP-ThemeDetector zu ermitteln, welches Theme und welche Plugins auf der Seite verwendet werden. Für das Theme werden die Informationen aus der style.css-Datei des Themes extrahiert. Bei Plugins werden deren Spuren im Quelltext ausgewertet. Dies führt bei den Plugins dazu das nicht alle Plugins ermittelt werden können, da manche Plugins nur im Backend wirken oder keine größeren Spuren im Quelltext der Seite hinterlassen. Der WP-ThemeDetector ist unter wpthemedetector.com zu finden.

Footer zu Beiträgen unter WordPress hinzufügen

Nachdem ein WordPress-Beitrag geschrieben und veröffentlicht wurde, wird er im Normalfall nicht mehr modifiziert. In meinem Fall wollte ich bestehende Beiträge um einen Footer ergänzen, konkret um auf die Möglichkeit hinzuweisen mich auf Steady zu unterstützen. Dazu existieren einige Plugins, welche allerdings in den meisten Fällen veraltet sind, wie z.B. Bottom of every post.

Bottom of every post
Preis: Kostenlos

Wesentlich aktueller ist das weiter gefasste Plugin Head, Footer and Post Injections, welches neben dem Beitragsfooter auch die Seitenheader und Footer anpassen kann.

Mit diesem Plugin kann für alle Beiträge ein Footer definiert werden. Dazu müssen die Einstellungen im Backend mit dem Punkt Header and Footer geöffnet werden und dort der Tab Posts ausgewählt werden. Wenn kein zusätzliches Plugin installiert werden soll, kann stattdessen das Theme angepasst werden. Dafür muss in der Theme-Datei functions.php eine Funktion angelegt werden:

function addPostFooter($content) {
  if(is_single()) {
    $content .= '<hr/>';
    $content .= 'Ich bin ein Testfooter';
  }

  return $content;
}

add_filter('the_content', 'addPostFooter');

Diese Funktion wird anschließend mittels add_filter zu den Filtern hinzugefügt und sorgt dafür dass der Footer an jedem Beitrag zu finden ist.

Datenbank und Medienoptimierung unter WordPress

Im Laufe des Lebens einer WordPress-Installation kann sich dass eine oder andere Datenfragment ansammeln. So existieren Einträge in der Datenbank welche nicht mehr benötigt werden oder es befinden sich Medien in der Mediathek, welche von keinem Eintrag mehr verwendet werden. Um dieser Probleme Herr zu werden existieren eine Reihe von Plugins zur Bereinigung der Installation.

Die Übersicht des Media Cleaners

Das erste Plugin, der Media Cleaner, ermittelt welche Medien sich in der WordPress-eigenen Mediathek befinden, aber nicht mehr genutzt werden. Nicht mehr genutzte Medien können anschließend gelöscht werden. Die Medien sollten allerdings mit Bedacht gelöscht werden; so erkennt der Media Cleaner keine URLs, welche sich normal im Text (sprich ohne a-Tag oder ähnliches) befinden. Auch kann es passieren das Bilder die laut dem Plugin nicht genutzt sind, falsch in den Beiträgen referenziert werden. So kann durch Domainumzüge und ähnliches der falsche Pfad zum Medium in den Beiträgen stehen. Hier muss der entsprechende Beitrag korrigiert werden.

Media Cleaner
Preis: Kostenlos

Ein weiterer Punkt, auf der Liste zur Optimierung, ist die Datenbank. So speichert WordPress z.B. zu jedem Artikel die Revisionen. Pro Artikel können da schon ein halbes Dutzend und mehr Revisionen zusammenkommen. Mit dem Plugin WP-Optimize kann die Datenbank entsprechend bereinigt werden. Neben den Revision, werden die Tabellen optimiert und verwaiste Fragmente ebenfalls entfernt.

WP-Optimize
Preis: Kostenlos

Eine weitere Sache bei der Optimierung von WordPress ist die Überprüfung der Verlinkungen. Mit dem Plugin Broken Link Checker kann dies bewerkstelligt werden. Nach der Installation überprüft das Plugin die Links innerhalb der Installation als auch externe Linkziele und stellt diese entsprechend da.

Broken Link Checker
Preis: Kostenlos

Bevor solche Optimierungen an der WordPress-Installation vorgenommen werden, sollte ein Backup der Datenbank und des Dateisystems erstellt werden. So kann die Installation, im Falle eines Fehler oder einer übereifrigen Optimierung, wieder hergestellt werden.

WordPress-Beiträge als Markdown exportieren

Auf der Suche nach einer Möglichkeit um Beträge in WordPress als Markdown-Dateien zu exportieren, bin ich auf wp2md gestoßen. Dabei handelt sich um eine kleine Applikationen zur Umwandlung der WordPress-XML-Exportdatei zu Markdown. Zur Installation muss der Python-Paketmanager pip bemüht werden:

pip install git+https://github.com/dreikanter/wp2md

Anschließend kann wp2md für dem Export genutzt werden:

wp2md -d output/ export.xml

In der Minimalkonfiguration muss der Ausgabepfad und die Exportdatei angegeben werden. Die Export-Datei wird vorher unter WordPress über Werkzeuge -> Daten exportieren erzeugt. Anschließend erscheinen die Logmeldungen über den Exportfortschritt:

Dumping post to 'output/posts/20180616-pdfs-aus-bildern-mittels-imagemagick-erstellen.md'
Dumping post to 'output/posts/20180617-homebrew-deinstallieren-2.md'
Dumping post to 'output/posts/20180618-fernausloesung-der-kamera-am-iphone.md'
Dumping post to 'output/posts/20180619-transparente-verschluesselung-fuer-cloud-dienste.md'
Dumping post to 'output/posts/20180620-online-vektorisierer-fuer-rastergrafiken.md'
Dumping post to 'output/posts/20180711-zettlr-ein-flexibler-markdown-editor.md'
Dumping post to 'output/posts/20180712-bsnes-neu-aufgelegt.md'
Dumping post to 'output/posts/20180713-enpass-als-1password-alternative.md'
Dumping post to 'output/posts/20180720-ideentool-mit-neuen-generatoren-erschienen.md'
Dumping post to 'output/posts/20180723-cryptomator-laufwerk-verschwindet-unter-macos.md'
Dumping post to 'output/posts/20180725-puffer-fuer-streaming-im-vlc-mediaplayer-erhoehen.md'
Dumping index to 'output/index.md'

Total: posts: 3239; pages: 78; comments: 2878
Elapsed time: 30.55538 s

Neben den eigentlichen Artikeln, werden die dazugehörigen Kommentare exportiert. Daneben werde andere Inhalte wie Seiten und Entwürfe ebenfalls exportiert. Über die Kommandozeilenparameter kann der Export granulärer gesteuert werden. Der Quelltext des Projektes ist auf GitHub zu finden. Lizenziert ist das Projekt unter der GPL in der Version 3 und damit freie Software.

Waipoua-Theme für den Podlove Publisher anpassen

Seit meinem letzten Wechsel des Designs auf seeseekey.net nutze ich eine stark modifizierte Version des Elmastudio-Themes Waipoua. Neben Anpassungen am Design wurden unter anderem die externen Einbindungen der Google Fonts deaktiviert. In den aktuellen Themes von Elmastudio werden diese leider immer noch extern eingebunden; was wohl auch auf absehbare Zeit so bleibt.

Leider hat das Waipoua-Theme einige Probleme mit dem Plugin Podlove Publisher. Der Podlove Publisher ist ein Plugin, welches einen Workflow für Podcasts, vom Anbieten bis zum Abonnieren bereitstellt.

Podlove Podcast Publisher
Preis: Kostenlos

Das erste Problem mit dem Podlove Publisher im Zusammenhang mit dem Waipoua-Theme ist die Anzeige der von Beiträgen mit dem Post Type podcast auf der Startseite. In den Experteneinstellungen des Podlove Publishers ist dies die Einstellung Blog und Podcast kombinieren. Damit dies mit dem Waipoua-Theme funktioniert muss die Datei index.php des Themes angepasst werden. Dort findet sich folgende Quelltextblock:

<?php /* Start the Loop */ ?>
<?php global $query_string;
query_posts( $query_string . '&ignore_sticky_posts=1' ); ?>

  <?php while ( have_posts() ) : the_post(); ?>

    <?php get_template_part( 'content', get_post_format() ); ?>

  <?php endwhile; // end of the loop. ?>

<?php wp_reset_query(); // reset the query ?>

An dieser Stelle werden sämtliche Manipulationen der Abfrage entfernt. Anschließend sollte der Code so aussehen:

<?php /* Start the Loop */ ?>

  <?php while ( have_posts() ) : the_post(); ?>

    <?php get_template_part( 'content', get_post_format() ); ?>

  <?php endwhile; // end of the loop. ?>

Nach dieser Modifikation tauchen die Beiträge mit dem Post Type podcast in der Beitragsliste im Startmenü auf. Das nächste Problem betrifft die Darstellung der Beiträge mit dem Post Type podcast, sobald diese einzeln angezeigt werden. Hierbei wird das Design zerschossen, da der Beitrag in voller Breite angezeigt wird. Eine Sidebar würde in diesem Szenario nach unten rutschen.

Nach dem Fix funktionieren die Einzelseiten mit dem Post Type podcast

Um dies zu verhindern muss die Datei header.php angepasst werden. Dort findet sich nach dem schließenden head-Tag die Zeile:

<body <?php body_class(); ?>>

Diese Zeile wird entfernt und stattdessen durch folgenden Quellcode ersetzt:

// Fix problem with single posts (post type: podcast)
$body_class = get_body_class();

// single-podcast exists in body class, replace
if (in_array("single-podcast", $body_class)) {

  echo "<body class=\"";

  foreach($body_class as $body_class_value) {
    if ($body_class_value == "single-podcast") {
      $body_class_value = "single-post";
    }

    echo $body_class_value . " ";
  }
  
  echo "\" >";
}
else {
?>
  <body <?php body_class(); ?>>
<?php
}
?>

Der Quellcode sorgt dafür das die Klasse single-podcast in single-post umbenannt wird. Damit greift das CSS für gewöhnliche Beiträge und die Darstellung der Podcast-Seiten funktioniert ohne Probleme. Als letzten Schritt habe ich die archive.php angepasst. In der Datei wurde der komplette header-Block entfernt. Diese Anpassung ist im Gegensatz zu den anderen Anpassungen Geschmackssache. Sie sorgt dafür das keinerlei Archivtexte mehr auftauchen.