WordPress: onclick

Es gibt eine neue Unterseite: tools. Darin ist noch fast nichts, nur ein Link, der mir ein “breitenloses Leerzeichen” in die Zwischenablage kopiert. Gut zu gebrauchen auf Mastodon, um bspw. das Plural-S von #hashtags abzutrennen. Aber das ist nicht der Grund, warum ich das poste.

Der Grund, warum ich das poste, ist dass es nicht offensichtlich ist, wie man WordPress einen JS-Link beibringt. onclick wird (offenbar?!) rausgefiltert, das altmodische href="javascript:" ebenfalls. Wie folgt geht es:

Das macht sich Gutenberg-Syntax zunutze, was aber auch im Classic-Editor erhalten bleibt.

Mastodon in WordPress Menü

Whoop whoop! Nachdem Elmo Twitter kaputt gemacht hatte, war ich letzten November endgültig zu Mastodon gewechselt. Das Widget im Menü hier hatte ich gelöscht. Nun habe ich in neues gefunden, das analog für Mastodon funktioniert: include-mastodon-feed.

Folgender Shortcode kommt zum Einsatz (might change):

include-mastodon-feed instance=”troet.cafe” account=”109371466136964927″ limit=”1″ excludeBoosts=”true” excludeReplies=”true” excludeConversationStarters=”true” linkTarget=”_blank” showPreviewCards=”false” text-permalinkPre=”am” date-locale=”de-DE” date-options=”{year:undefined, month:’long’, day:’numeric’, hour:’numeric’, minute:’numeric’}” text-permalinkPost=”:”

Ergänzt um etwas css:

In eigener Sache

Hallo und guten Tag.

Drei kurze Durchsagen in eigener Sache:

  1. Ich habe die Permalink-Struktur geändert. Das hatte ich seit langem vor, ursprünglich weil mich dieser SEO-“Zwang” nervt. Ich dachte an “short URLs” à la fefe, leider scheint es kein Plugin zu geben, das SEO-URLs auf zB Post-ID umbiegt (oder?), deshalb jetzt der (sehr) abgespeckte Workaround: Ich habe Tag/Monat/Jahr aus den URLs entfernt und lasse nur den Post-Namen. Dafür brauche ich dann aber auch kein Plugin, es genügt .htaccess. Geholfen hat mir dabei der Permalink-Helper von hier, der genau diesen Fall abdeckt.
  2. Ebenfalls seit langem habe ich vor, “einige” Alben vorzustellen. Initial als “10 Alben für die einsame Insel” geplant, wurden es erst 25, dann 50 Alben 😀 Die 50 habe ich dann doch noch nicht ganz zusammen; außerdem ist es ein Haufen Arbeit, zu jedem Album ein paar einleitende Worte zu sagen, sowie ein paar Anspiel-Tipps herauszusuchen. Deshalb mache ich jetzt eine neue Reihe mit dem Titel “5 Alben für die Insel” daraus – ohne besondere Reihenfolge und “open end”. Hier der erste!
  3. In letzter Zeit ist die Aktivität hier im Blog (gefühlt? spürbar?) eingeschlafen. Das liegt an drei Faktoren:
    • Ich arbeite beruflich an ein und demselben Projekt, was auf Dauer weniger neue Erkenntnisse bringt, als bsplw. die abwechslungsreiche Arbeit bei JvM.
    • Ich habe jetzt ein Haus, das eine Menge Arbeit mit sich bringt. Dazu hatte ich mal eine eigene Kategorie “Heimwerkerking” angedacht, aber zu komplexen Posts komme ich zur Zeit nicht.
    • es liegen einige Artikel auf Halde (siehe oben), bzw. passen Ideen nicht in die bestehenden Kategorien

    Faktor #2 und #3 haben mich dazu bewogen, eine weitere neue Kategorie einzuführen: “NOTE“. Angedacht ist eine Art “Twitter extended”, also kurze Gedankenspiele, nicht notwendigerweise mit Kontext oder rotem Faden, aber mit mehr als 140 Zeichen. Inhaltlicher Freestyle.
    NOTE wird unter Apropos einsortiert.

PS: Ich werde zum 1.11. “schon wieder” den Arbeitgeber wechseln, insofern bald vielleicht doch wieder ein paar Coding-Posts mehr 😉

hf

Öfter mal was Neues: Neues Theme

Irgendwie bin ich gerade im Veränderungen-Modus. Anlass genug, daraus eine kleine Serie zu starten, die relativ profan beginnt: crusy.net hat ein neues Theme: Publish. So weit, so uninteressant. Für die Akten möchte ich aber kurz aufstellen, was ich normalerweise alles anpasse an so einem Theme:

  • HTML-Header, header.php:
    • Seitentitel auf “crusy.net” ändern (=Tagline rauswerfen, vgl. unten)
    • Keywords, Description, Sharing-Tags einfügen
  • Blog-Header, hier custom-header.php: Ich habe meinen Gravatar durch ein lokales Bild ersetzt, Stichwort Tracking
  • in Würdigung des cleanen Looks des Themes habe ich die letzten Kommentare und Tweets aus der Seitenleiste geworfen; Tag Cloud und Links sind auf jeweils separate Seite gewandert. Um die Tag Cloud dorthin zu bekommen, habe ich ein neues Page-Template angelegt
  • comments.php, Stichwort “comment_notes_after“: Im Kommentar-Bereich meiner Posts (meine Pages erlauben keine Kommentare) habe ich einen Disclaimer zu Akismet ergänzt (Hintergrund)
  • styles.css:

Wozu den letzten Punkt? Nun, ich habe gerne eine zufällig gewählte “Tag line” in der Seite; eine Spielerei und gute Möglichkeit, Kalauer unterzubringen. Da ja nun meine Tweets rausgeflogen sind (siehe oben), möchte ich diese hier unterbringen, und zwar verlinkt. Optisch soll das aber nicht offensichtlich sein – nennt es ein Easteregg. Da werden sicherlich auch noch welche dazukommen oder rausfliegen.

So viel dazu.

UPDATE:

ich habe schon wieder ein neues Theme: Ari von Elmastudio  🙂

WordPress: Posts sortieren über mehrere Custom Fields

In WordPress kann man eigene Daten zu jedem Post speichern, so genannte Custom Fields. Technisch funktioniert das so, dass pro Post und Field ein Eintrag in der Tabelle wp_postmeta angelegt wird.

Beispiel: Ein Rating-Plugin könnte pro bewertetem Post einen Eintrag <meta_key:rating> mit der Gesamtzahl an “Sternen” (1=schlecht, 5=super), und einen Eintrag <meta_key:raters> mit der Anzahl an abgegebenen Stimmen anlegen. Also zwei Zeilen in wp_postmeta pro Post, für den Stimmen abgegeben wurden. Genau so macht es “Post Rate“. Anmerkung: Man speichert das schon deshalb als zwei diskrete Werte, um bei der nächsten Bewertung wieder den Durchschnitt berechnen zu können – ich musste kurz überlegen, bis mir das klar wurde 🙂

So, nun hat man in dem Beispiel bewertete Posts, und möchte diese Posts vielleicht nach ihrer Bewertung sortiert anzeigen. Kann ja nicht so schwer sein, schließlich gibt es zB $wpdb mit get_results(). Zu einem Problem wird das (für jemanden, dessen SQL-Kenntnisse etwas eingerostet sind mich) dadurch, dass es eben zwei Einträge in wp_postmeta gibt – und beide speichern ihren Wert in wp_postmeta.meta_value! Für eine Sortierung müsste man die Bewertung (stehen unter <meta_key:rating> in meta_value) durch die Anzahl an Stimmen (stehen unter <meta_key:raters> in meta_value) teilen.

Lösung: JOIN. Erst habe ich einen LEFT JOIN versucht geklaut, aber der definiert sich so, dass er alle Posts ausgegeben hätte, selbst wenn für sie gar kein Rating abgegeben wurde. Deshalb also nur JOIN. Basierend auf dem Foreneintrag mit dem LEFT JOIN ist dabei folgendes entstanden:

Etwas wie AS lag mir schon auf der Zunge, allerdings eher als SELECT AS… das in einem (bzw. zwei) JOIN zu verwenden, und zwar sowohl in dem JOIN (“rating.post_id”), wie auch im ORDER BY hätte ich nicht hinbekommen. In diesem Sinne: HTH 🙂

PS: Die formatierte Ausgabe ergibt sich dann aus dem bereits erwähnten Eintrag.

WordPress: Bilder nicht automatisch verlinken

Das nervt mich: Bei Posts mit Bildern werden diese verlinkt, und zwar hart auf die Datei. Völlig sinnlos, wenn man mich fragt. Man kann das aber deaktivieren, und zwar unter http://your.address.here.com/wp-admin/options.php, image_default_link_type. Anders als in der Quelle angegeben, lässt man das aber nicht leer, sondern trägt “none” ein. Ärgerlich: Das gilt nur für neue Posts 🙁

HTH

Twitter für WordPress

Es gibt viele Plugins für WordPress, um seine Tweets anzuzeigen.

Das Problem von fast allen: Sie rufen serverseitig ab, und zwar dynamisch. Ein Problem ist das deshalb, weil Twitter die Anfragen auf 150/Stunde/IP beschränkt. Wenn man, wie ich, keinen dedizierten Server mit eigener IP hat, dann sind die 150 Requests schnell aufgebraucht. Sehr schnell. Ich habe gerade (unter der Woche, gegen 23 Uhr) etwa 7 Minuten gebraucht. Wenn das Plugin nun serverseitig die Nachrichten abruft, dann kommen also keine Ergebnisse – und darüber hinaus hängt die Seite schlimmstenfalls, weil das PHP-Skript auf Twitter wartet.

Eine schlechte Eigenschaft von vielen Plugins darüber hinaus: Sie zeigen keine Retweets an.

Mindestens das folgende Plugin umgeht die oben beschriebenen Probleme: Tweet Blender. Erstens zeigt es auch Retweets an. Dann legt es einen Cache an, und verwendet diesen, statt jedes mal Twitter anzupingen. Dieser Cache wird nach dem Laden der Seite per Javascript geholt; die Seite hängt also nicht.

Außerdem zeigt es den aktuellen Serverstatus in Bezug auf verbleibende Requests an (siehe Bild; das hat mich überhaupt erst auf das Thema gebracht); auf Wunsch auch als Nachricht für den Nutzer. Es unterstützt übrigens auch mehrere Accounts (was mir persönlich schnurz war).

Das Ergebnis seht ihr rechts; morgen (oder so) werde ich das mal ein wenig skinnen.