Wenn man in den letzten Wochen das WordPress-Theme “Enfold” (und auch viele andere) aktualiseren wollte, stand man vor dem Problem, dass das automatisches Update nicht funktioniert hat. Der Grund dafür: Envato, der Betreiber von Themeforest, wo all diese Themes gekauft wurden, hat das API geändert und die aktuelle Version von Enfold kann sich nur mehr über die neue Schnittstelle mit Envato verbinden, um sich Updates zu holen.  Weiterlesen

Bei einer Kundenwebsite bin ich auf ein seltsames Phänomen gestoßen: aus Photoshop gespeicherte JPG für die Website hatten bei 650 x 420 Pixel Größe etwa 1.9 Megabyte, wo schätzungsweise 100 kB für einwandfreie Qualität ausgereicht hätten. Auch das Speichern in einer anderen Qualitätsstufe brachte keine merkliche Reduktion der Dateigröße, nur mit “Für Web speichern” funktionierte die Verkleinerung.  Wenn man diese riesigen Dateien dann in WordPress hochgeladen hat, wurden die Vorschaubilder ebenfalls nicht merklich kleiner – denn ein Bild mit 100×75 Pixel sollten definitiv keine 1.7 Megabyte haben. Weiterlesen

Wie viele andere Webworker habe ich etliche Kundenprojekte beim deutschen Hoster All-inkl.com untergebracht – Tempo, Service & Support sind gut und die Server können alles, was man für die meisten Projekte braucht. Unter anderem ein Grund für die Wahl dieses Providers: bereits seit 2016 kann man dort bei allen Tarifen mit SSL-Erweiterung (und auch bei allen Reseller-Paketen!) LetsEncrypt-Zertifikate verwenden – kostenlose SSL-Zertifikate, um die eigene Website mit SSL-verschlüsselter Verbindung zum Server ausstatten zu können. Diese Zertifikate werden von einer gemeinnützigen Zertifizierungsstelle ausgegeben und bieten ein genauso hohes Maß an Sicherheit wie kostenpflichtige Zertifikate. Die verschlüsselte Verbindung zwischen Server und Browser ist spätestens im Mai 2018 (aufgrund der Datenschutz-Grundverordnung DSGVO) Pflicht, wenn man z.b. ein Kontaktformular auf der Website betreibt oder sonstige persönliche Daten der Website-Besucher einsammeln will.

Es ist also eine gute Zeit, um die eigene Website damit aufzurüsten. Das geht sehr einfach und kostet nix extra, wenn man entweder ein Webhosting-Paket mit SSL-Erweiterung hat oder bei einem Reseller untergebracht ist:

  • Bei all-inkl.com ins Kundenadministrationssystem (KAS) einloggen.
  • Menüpunkt “Domain” auswählen, bei der gewünschten Domain auf   “Bearbeiten” klicken.
  • Bei “SSL-Schutz” aufs Symbol  neben “Bearbeiten” klicken.
  • Dort auf den Punkt “LetsEncrypt”. Haftungsausschluss anhaken, und auf “jetzt ein Let’s Encrypt-Zertifikat beziehen und einbinden” klicken.

Fertig. Bereits einige Minuten später ist das Zertifikat aktiv und wird künftig alle 3 Monate bei Ablauf automatisch erneuert. Die Website sollte nun auch mit https:// erreichbar sein. Allerdings sind je nach Website noch weitere Arbeiten nötig, damit die Verbindung vom Browser wirklich als “sicher” eingestuft wird. Es dürfen etwa keine externen Bilder, Schriften oder sonstige Daten unverschlüsselt (also mit http://-Adresse) eingebunden sein. Je nach technischem Aufbau der Website (statisch oder CMS wie WordPress, Joomla, Drupal…) sind dazu unterschiedliche Arbeitsschritte nötig. Ich berate Sie gerne bei der Umsetzung – damit auch IHRE Website als sicher gilt :-)

Wenn man eigene Module für das beliebte Theme Divi schreibt, so ist die Chance hoch, dass die Module im Backend scheinbar nicht funktionieren oder Änderungen am Backend vorerst nicht sichtbar sind. Das liegt daran, dass Divi das Backend sehr speziell zwischenspeichert: es nutzt das JavaScript Local Storage API, um die Daten auf deinem Rechner zu lagern – es nutzt daher nix, einfach den Browser-Cache zu leeren.  Die Elemente in diesem Zwischenspeicher kann man z.B. in Chrome im Inspector-Fenster (STRG-Umschalt-I) unter Application->Local Storage sehen. 

Um diese Elemente zu löschen, reicht eine Zeile Javascript, die man im Inspector in der JavaScript-Konsole laufen lässt:

window.localStorage.clear()

Das löscht alle Elemente im Local Storage, beim neu laden des Backend werden alle Elemente daher frisch vom Server geholt.

Für Entwicklungszwecke gibts beim Open-Source-Entwickler Jonathan Bossenger (dessen Artikel zum Thema die Basis für diese Info war!) ein Plugin, das den Local Storage bei jedem neu laden des Backends löscht. Sobald man mit dem Bearbeiten der Module fertig ist, sollte man das Plugin allerdings unbedingt wieder deaktivieren!

Heute stand ich vor der Aufgabe, die WordPress-Website eines Kunden per Duplicator-Plugin von World4you zur Weiterentwicklung auf einen Testserver zu überspielen. Das Erstellen des Archivs und des Installers funktionierte problemlos, allerdings spuckte der Server beim Versuch, die beiden Dateien herunterzuladen, eine Fehlermeldung aus: “Internal Server Error – The server encountered an internal error or misconfiguration and was unable to complete your request. Your administrator may not have enabled CGI access for this directory.”

Nach kurzer Suche war der Schuldige schnell gefunden: der Duplicator legt seine Dateien im Verzeichnis /wp-snapshots ab. Dort wird bei der Installation eine Datei namens .htaccess angelegt, deren Inhalt nur dafür sorgen soll, dass beim direkten Aufrufen des Verzeichnisses der Inhalt nicht aufgelistet werden kann. Und das mag der World4you-Server offenbar gar nicht, denn diese Einstellung kann man im Kundenbereich my.world4you.com unter “Webspace -> Einstellungen -> Weitere Server-Einstellungen” global für alle Verzeichnisse setzen: wenn hier “Directory Listing” auf AUS gesetzt ist, kann die .htaccess mit diesem Inhalt getrost entfallen.

Abhilfe also: Directory Listing im Kundenbereich auf AUS, .htaccess (NUR die Datei im Verzeichnis /wp-snapshots – NICHT die .htaccess im Hauptverzeichnis!!!!!) löschen – und der Download der Duplicator-Files klappt einwandfrei.

Interessanter Artikel letztens bei Sistrix: Want to slowly kill your content on Google? Simply use a directory structure with dates. Kurz zusammengefasst raten die Profis davon ab, in URLs das Datum einzubauen, wie es etwa in WordPress möglich ist. Denn derartige Artikel rutschen stetig im Ranking nach hinten, bis sie praktisch unfindbar werden. Ich kann ein Lied davon singen – da ich seit August 2000 blogge, gibts über 2000 Beiträge online, von denen allerdings ein Gutteil bereits so nach hinten gerutscht ist, dass sie kaum mehr aufgerufen werden. Ich hatte schon längere Zeit die URLs im Verdacht, daran mit schuld zu sein.

Also Umstellung der URLs auf ein Format, das Google mehr mag. Weiterlesen

Genau heute vor 10 Jahren hab ich meine erste WordPress-Website freigeschaltet: dieses Weblog hier war das erste Projekt, das ich damit umgesetzt habe.  Weiterlesen

Aus aktuellem Anlass Notiz an mich selbst: wenn man die Einzelansicht der Beiträge in einer bestimmten Kategorie mit einer eigenen Seitenvorlage darstellen will, dann reicht das folgende Codeschnipsel in der functions.php:

//Fragt den slug der Kategorie des Beitrags ab und wendet single-[kategorieslug].php als Template an, wenn vorhanden
add_filter('single_template', create_function(
  '$the_template',
  'foreach( (array) get_the_category() as $cat ) {
    if ( file_exists(TEMPLATEPATH . "/single-{$cat->slug}.php") )
      return TEMPLATEPATH . "/single-{$cat->slug}.php"; }
    return $the_template;' )
);

Wenn man ein Child-Theme nutzt, muss man noch TEMPLATEPATH durch STYLESHEETPATH ersetzen. Danach noch eine Vorlagendatei im Template-Verzeichnis erzeugen, die single-[kategorieslug].php heißt (Kategorieslug durch den Kurznamen der gewünschten Kategorie ersetzen) – fertig.

Quelle: WordPress-Forum

Wenn man WordPress-Themes entwickelt oder den Auftrag zur Weiterbearbeitung bekommt, ist es oft wichtig herauszufinden, mit welcher Template-Datei die aktuell angezeigte Seite gerendert wird. Das lässt sich einfach herausfinden: einfach den folgenden Codeschnipsel in die Datei functions.php des verwendeten Themes kopieren, dann wird die verwendete Template-Datei für eingeloggte User in einem HTML-Kommentar im Header der Seite ausgegeben:
add_action('wp_head', 'show_template');
function show_template() {
global $template;
if(is_user_logged_in()) {
echo '\n\n<!--// Template: '; print_r($template); echo '//-->\n\n';
}
}