6B Logo

Notizen zu WordPress [2]

Aus aktuellem Anlass wollen wir uns heute mit zwei fiesen Details von WordPress beschäftigen, mit denen zwar die meisten kaum konfrontiert werden dürften, aber wenn, dann nerven sie gehörig.

Zeitmarken auf niedrigem Autoren-Level

Mit dem Veröffentlichungsdatum von Beiträgen gibt es ein ärgerliches Problem, das in der Regel bei Mehrautorenblogs auftaucht und von dem nicht ganz klar ist, ob es sich um einen Bug handelt oder eine geheimnisvolle Absicht dahinter steckt. Drauf gestoßen sind wir beim Stuttgart Blog, wo sich die Autoren alle auf Level 3 bewegen und es viele gute Gründe gibt, dass es dabei auch bleibt. Legt ein Autor einen neuen Beitrag an und sichert ihn als Entwurf, wird der Zeitpunkt der ersten Speicherung als Datum festgehalten und nachträglich nicht mehr aktualisiert, weder beim erneuten Speichern noch beim Veröffentlichen. Wozu das gut sein soll, versteht kein Mensch, kaum etwas scheint uns weniger interessant als die Frage, wann der erste Entwurf gesichert wurde. Lösen lässt sich das Problem nur, indem entweder der Benutzerlevel mindestens auf 5 gesetzt wird (was wir nicht wollten) oder zwei Skripte ein paar Eingriffe erfahren.

Die Änderungen bergen zwar keinerlei Gefahren, es ist aber nie falsch, sie an sicherer Stelle zu protokollieren – beim nächsten Update sind sie sonst wieder hinfällig. Als erstes öffnen wir /wp-admin/edit-form-advanced.php, in Zeile 169 findet sich folgender Code:

<?php if ($user_level > 4) : ?>
   <tr>
   <th scope="row"><?php _e('Edit time'); ?>:</th>
   <td><?php touch_time(($action == 'edit')); ?></td>
   </tr>
<?php endif; ?> 

Er sorgt dafür, dass nur bei Benutzern, deren Level über 4 (also mindestens 5) liegt, die Input-Elemente zum Bearbeiten der Zeitmarke überhaupt angezeigt werden. Jetzt wird einfach die if-Bedingung angepasst:

<?php if ($user_level > 2) : ?>

Als zweites müssen wir uns noch /wp-includes/functions-post.php vorknöpfen. Ab Zeile 367 sind zwei Funktionen definiert, die dem Benutzer erlauben, die Zeitmarke erstens zu bestimmen und zweitens nachträglich zu ändern:

function user_can_set_post_date($user_id, $blog_id = 1, $category_id = 'None') {
   $author_data = get_userdata($user_id);
   return (($author_data->user_level > 4) && user_can_create_post($user_id, $blog_id, $category_id));
}

function user_can_edit_post_date($user_id, $post_id, $blog_id = 1) {
   $author_data = get_userdata($user_id);
   return (($author_data->user_level > 4) && user_can_edit_post($user_id, $post_id, $blog_id));
}

In der jeweils dritten Zeile der beiden Funktionen wird der Level wiederum entsprechend herabgesetzt:

return (($author_data->user_level > 2)

Das war's. Passieren kann nichts, und die sonstigen Rechte bzw. Limits des Benutzerlevels 3 bleiben von den Anpassungen absolut unberührt. Vor allem aber funktioniert damit die automatische Aktualisierung des Datums, so wie sie jeder Normalsterbliche erwartet.

Autoren ohne Website

Ein weiteres seltsames Gebaren zeigt sich, wenn man einen Autoren anlegt, der keine Website unterhält. Die Voreinstellung des URL-Feldes steht auf http://, wogegen zunächst nichts spricht. Leider ist es nicht möglich, das http:// jemals loszuwerden. Man kann es löschen und das Benutzerprofil sichern solange man will, es bleibt einem treu erhalten.

Unglücklich wird das Ganze, wenn Autoren als Kommentatoren auftreten und dabei eingeloggt sind. Ihre Daten brauchen sie in dem Fall nicht einzugeben, die zugehörigen Felder sind ausgeblendet. Der Name erscheint bei der Ausgabe dann zwangsläufig verlinkt, nur führt der Link nach http:// und damit nirgendwo hin.

Um den Plagegeist endgültig zu eliminieren, öffnen wir wp-admin/user-edit.php und gehen zu Zeile 65, wo die zuständige Variable verzeichnet ist:

$new_url = preg_match('/^(https?|ftps?|mailto|news|gopher): /is', $new_url) ? $new_url : 'http://' . $new_url; 

Die ändern wir einfach ab, dann ist Ruhe:

$new_url = preg_match('/^(https?|ftps?|mailto|news|gopher): /is', $new_url) ? $new_url : '' . $new_url;

Auch diese Anpassung sollte man sich tunlichst notieren, wenn das nächste Update schmerzfrei verlaufen soll.

Journal abonnieren