SchlagwortPHP

Bugis für WP-PageNavi anpassen

Mein neues WordPress Theme Bugis bringt von Haus aus eine Unterstützung für WP PageNavi mit. So steht es jedenfalls in der Beschreibung des Theme. Leider beschränkt sich diese Unterstützung in der Bereitstellung des entsprechenden CSS-Codes. Das ist zwar ein Großteil der Arbeit, aber es wäre schon schön gewesen, wenn auch in den Theme-Dateien selber bereits das Plugin integriert wäre. Und zwar mit einer Abfrage, ob das Plugin installiert und aktiviert ist. Und im Fall des Nichtvorhandenseins von WP-PageNavi sollte eine Fallback-Lösung angeboten werden.
Lies „Bugis für WP-PageNavi anpassen“ weiter

WordPress: Datum der Aktualisierung eines Beitrags ausgeben

Wer seine Beiträge auch überarbeitet, kennt das Problem: Es wird nur das Datum der ersten Veröffentlichung ausgegeben. Und selbst mehrfach aktualisierte Posts wirken veraltet. Doch mit dem Template-Tag the_modified_time() kann man leicht das Datum der letzten Aktualisierung ausgeben.

Mit dem folgenden PHP-Code gebe ich das Datum der Veröffentlichung eines Posts aus. Dann wird abgefragt, ob es dies mit dem Datum der letzten Überarbeitung gleich ist. Ist dem nicht so, wird auch das Datum der letzten Überarbeitung ausgegeben:

Ver&ouml;ffentlicht: <?php the_time('j.m.Y'); ?> <br />
<?php
if (get_the_modified_time() != get_the_time()) {
echo ("&Uuml;berarbeitet: ");
the_modified_time('j.m.Y');
echo ("<br />");
} ?>

Für meine Bedürfnisse wird der Ausgabe jeweils noch ein Veröffentlicht: bzw. ein Überarbeitet vorangestellt. Ebenso wird die Ausgabe mit einem Zeilenumbruch beendet. Dieser Code funktioniert gänzlich ohne irgendwelche Plugins. Wer die Ausgabe anpassen möchte, findet im WordPress Codex unter dem Stichwort the_modified_time() weitere Informationen.

WordPress: Nachricht bekommen, wenn jemand die Suchfunktion benutzt

Benutzt eigentlich jemand die WordPress interne Suche? Und nach welchen Inhalten wird das eigene Blog durchsucht? Dieses kleine PHP-Script schickt an den Administrator eine sofort E-Mail, wenn ein Besucher die Suchfunktion benutzt.

Michael Jendryschik bietet in seinem überaus lesenswerten Artikel zu individuellen Fehlerseiten ein Script an, dass den Administrator bei Fehlermeldungen des Servers informiert. Mit ein paar kleinen Änderungen kann man dieses Script auch in sein WordPressblog einbauen und sich über die Benutzung der internen Suchfunktion von WordPress informieren lassen.

Das Script

<?php

// 1. Adresse, an welche die E-Mail versendet werden soll
$empfaenger = "deineemail@adres.se";
$betreff = "Neue Suchanfrage auf www.deinedomain.de";

// 2. Nachricht zusammenbauen.
$message = "Auf der Website wurde die interne Suche benutzt.\n\n";
$message .= "Aufgerufene Ressource:\n";
$message .= "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]."\n\n";
$message .= "User-Agent:\n";
$message .= $_SERVER["HTTP_USER_AGENT"];
if($_SERVER["HTTP_REFERER"] != "") {
$message .= "\n\nAufgerufen von der Adresse:\n";
$message .= $_SERVER["HTTP_REFERER"]; }

// 3. Header-Informationen
$header = "From: Benachrichtigung Suche <info@" . $_SERVER["SERVER_NAME"]."-->\n";
$header .= "Content-Type: text/plain";

// 4. Mail zusammenstellen und absenden
@mail($empfaenger, $betreff, $message, $header);
?>

Der PHP-Code selber ist in vier Teile aufgeteilt:

  1. In diesem Teil wird definiert, wohin die Benachrichtigung geschickt werden soll.
  2. Dies ist der entscheidende Teil des Benachrichtigungsscripts. Hier wird wird mit dem Abschnitt
    $message .= "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]."\n\n";

    die angefragte Suchseite mit den Suchbegriffen ausgegeben. Bereits anhand dieser URL sollten die Suchbegriffe deutlich werden. Ansonsten muss man die Seite halt selber aufrufen, sofern dort auch die Suchbegriffe selber angezeigt werden.
    Mit dem Teil

    if($_SERVER["HTTP_REFERER"] != "") {
    $message .= "\n\nAufgerufen von der Adresse:\n";
    $message .= $_SERVER["HTTP_REFERER"]; } wird zudem noch abgefragt, auf welcher Seite die Suche gestartet wurde.
  3. Dieser Teil definiert die Absenderinformationen für die Benachrichtigungs-E-Mail.
  4. Und wird die E-Mail zusammengesetzt und gesendet.

Anpassen

Im ersten Teil musst du zwei Einträge ändern. Statt deineemail@adres.se musst du deine E-Mail-Adresse eintragen. Und auch www.deinedomain.de solltest du ändern, aber es ist nur eine kosmetische Änderung.

Einbinden in WordPress

Damit das Script leicht eingebunden werden kann, braucht dein WordPress-Theme ein eigenes Template für Suchergebnisse. Die meisten WordPress-Themes sollten ein solches Template haben, auch das mit WP 3.0 mitgelieferte Twenty Ten bringt eine search.php mit.

Dort bringt man am Ende des Templates das obige PHP-Script unter. Vor diesen zwei abschließenden Zeilen ist es am Besten untergebracht:

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Aber …

Für ein kurzzeitiges Monitoring eignet sich die E-Mail-Benachrichtigung gut. Längerfristig sollte man für sein WordPress-Blog ein vernünftiges Statistik-Tool benutzen, mit dem auch ein Monitoring der internen Suchfunktion möglich ist.

Am häufigsten kommentierte Posts zu einem Tag ausgeben mit WordPress

Die Übersichtsseiten zu den verschiedenen Themen dieser Seite wollte ich etwas aufwerten. Dazu sollten die am meisten kommentierten Beiträge eingeblendet werden. Mit ein paar kleinen Zeile ist es leicht möglich, diese Beiträge zu einem bestimmten Tag mit WordPress auszugeben.

Posts zum Tag WordPress nach Anzahl der Kommentare ausgegeben
Posts zum Tag WordPress nach Anzahl der Kommentare ausgegeben

Der englische Beitrag Get Popular Posts In Current Week, Month By Comment Count bildet die Grundlage für den folgenden Code-Schnipsel. Mit ein paar Modifikationen, sprich dem Einbinden der Abfrage des passenden Tags, lassen sich einfach die am meisten kommentierten Artikel zu einem Thema auflisten.

Der gesamte Code zur Ausgabe der Artikel nach Kommentarzahl sortiert

Das folgende Code-Beispiel ist recht einfach aufgebaut und benutzt das bekannte query_posts() mit einigen Parametern:

<ul>
<?php query_posts('post_type=post&posts_per_page=5&tag=WordPress&orderby=comment_count&order=DESC'); while (have_posts()): the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> {<?php comments_number('0', '1', '%');?>}</li>
<?php endwhile; wp_reset_query(); ?>
</ul>

Die einzelnen Parameter aufgeschlüsselt

Mit post_type=post wird bestimmt, was ausgegeben werden soll. Hier sollen nur Posts, also Artikel ausgegeben werden. Denn Seiten können auf dieser Seite nicht kommentiert werden.

posts_per_page=5 Theoretisch könnte man diesen Query auf mehrere Seiten verteilen und man bestimmt hiermit, wieviele Artikel auf einer Seite dargestellt werden sollen.

Mit tag=WordPress wird bestimmt, dass nur Beiträge mit dem Tag WordPress ausgegeben werden sollen. Auf die exakte Schreibweise des Tags ist hier zu achten. Und wer Tags mit Leerzeichen benannt hat, wird höchstwahrscheinlich Probleme bekommen. Abhilfe schafft die Umbenennung der Tags und Trennung der Worte mit einem Bindestrich.

Wonach sollen die ausgegebenen Beiträge sortiert werden? Genau, nach der Anzahl der Kommentare: orderby=comment_count.

Und zwar sollen die Beiträge mit den meisten Kommentaren oben stehen, weshalb so sortiert wird: order=DESC.

Rundherum …

Wer die Ausgabe anpassen möchte, darf sich an die Bearbeitung dieser Zeile machen:

<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> {<?php comments_number('0', '1', '%');?>}</li>

Die Artikel werden als Liste ausgegeben, in denen der Titel des Artikels verlinkt ist und dann die Anzahl der Kommentare als Zahl angegeben wird:

Der Artikeltitel kann als Überschrift ausgegeben werden, Datum und Auszüge des Artikels ausgegeben und natürlich kann auch die Anzahl der Kommentare besonders hervorgehoben werden. Der Gestaltung sind durchaus wenige Grenzen gesetzt.

Mein Wunsch …

Mein Wunsch zur Aufwertung von Tag-Archiven wäre allerdings eine Erweiterung des Scripts: Auf den Seiten einzelner Artikel werden die meist kommentierten Artikel zu einer Auswahl aus bestimmten Tags ausgegeben. Das könnte durchaus interessante Verknüpfungen hervorbringen, wobei mir der Aufwand und auch die Fehleranfälligkeit doch unnötig hoch zu sein scheint.

WordPress: Artikel bestimmter Kategorien für Suchmaschinen sperren

Suchmaschinen sollen gelegentlich nicht alle Artikel eines Blogs in ihren Index aufnehmen. So sollen Google & Co meine regelmäßigen Links nicht in ihren Index aufnehmen.

Mit einer Anweisung im <head> Bereich lassen sich Suchmaschinen leicht überzeugen, bestimmte Inhalte nicht zu indexieren. Und dank der Aktion Frag den WordPress-Experten habe ich nun folgenden PHP-Code eingebaut:

[code lang=“php“]<?php if ( is_single() && in_category(‚283‘) || is_search() || is_date() ) {
echo "<meta name=\"robots\" content=\"noindex, follow\" />\n";
} ?>[/code]

Damit erhalten alle Beiträge in einer bestimmten Kategorie, nämlich die Kategorie mit der ID 283, diesen Metatag:

[code lang=“php“]<meta name="robots" content="noindex, follow" />[/code]

Und tauchen damit nicht im Index der Suchmaschinen auf.

Vielen Dank an Perun für diesen Tipp!

Update: HTML-eigene Zeichen sollte man schon codieren, wenn man <head> schreibt … Im Feed ist der Beitrag daher nur unvollständig zu sehen gewesen.