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:
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):
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.
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!
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 😉
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
/* HREFs werden nicht mehr unterstrichen, was den cleanen Look unterstreicht */
a {text-decoration:none;}
/* enfernt überflüssigen Abstand zwischen Footer und Seite */
.site {margin-bottom:0;}
/* gleicht die Abstände von Navigation und Suche an */
.site-header {margin-bottom:0;}
nav.main-navigation {margin-top:0;}
/* das Bild oben links wird rund */
.site-logo img {border-radius:50%}
/* Navigation lowercase */
.main-navigation a, .widget-area ul li a {text-transform:lowercase;}
/* Navigation endet immer auf "." */
.main-navigation a:after, .widget-area ul li a:after {content:".";}
/* Gleicht Position des Suchfelds optisch aus; Fontsize angepasst */
#searchform {margin-left:-3px;font-size:13px;}
/* Innenabstand des Suchfelds angepasst */
#s {padding:4px3px3px4px;}
/* Verbirgt Navigation von Post zu Post */
.post-navigation {display:none;}
/* HREFs in der Tagline (unter dem Bild oben links) sehen aus wie normaler Text */
.site-description a {color:#999999;font-size:13px;font-weight:300;margin:10px020px;text-decoration:none;}
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 🙂
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 versuchtgeklaut, 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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$querystr="SELECT * FROM $wpdb->posts
JOIN $wpdb->postmeta AS rating ON(
$wpdb->posts.ID = rating.post_id
AND rating.meta_key = 'rating'
)
JOIN $wpdb->postmeta AS raters ON(
$wpdb->posts.ID = raters.post_id
AND raters.meta_key = 'raters'
)
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()
ORDER BY ((rating.meta_value)/(raters.meta_value)) DESC";
$pageposts=$wpdb->get_results($querystr,OBJECT);
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.
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 🙁
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.
Ich sehe gerade, dass die von Grooveshark verlinken Songs nicht z.B. im Google Reader angezeigt werden. Youtube funktioniert, aber da benutze ich auch ein Plugin. Kennt jemand sowas auch für Grooveshark, bzw. hat jemand Erfahrungen?
Oft sind meine Einträge sehr kurz. Ich hänge aber immer ein paar Tags an jeden Eintrag – eigentlich, um diese trotz kurzem Inhalt wiederzufinden. Leider durchsucht WordPress per default keine Tags… Abhilfe schafft das Plugin WP Search Tags, das auch mit WP 3.2.1 funktioniert.