Schnellere WP_Queries, Makerlog und der WordPress Login

Diese Woche bin ich recht produktiv gewesen, einige Dinge waren für mich altbekannt und auch einige völlig neu. Wieso ich diese Woche so produktiv war und welches Hilfsmittel mir dabei geholfen hat, liest du hier.

Schnellere WP_Queries

Auf gutefrage fragte ich nach, wie andere ihre Queries aufbauen, sodass sie auch mit vielen Daten arbeiten können. Die Antworten nutzte ich dann, um mir eine Lösung in WordPress auszumalen. Glücklicherweise bietet der WP_Query ein Argument, mit dem sich die Queries verbessern lassen, weil man nur bestimmte Spalten abrufen kann.

Das Zauberwort lautet in unserem Fall fields. Um also mit dem WP_Query einzelne Spalten anzusprechen, bspw. die ID eines Beitrags, ohne alle anderen Spalten zu durchlaufen, muss folgendes gemacht werden:

$args = [
    'post_status' => 'publish',
    'fields'      => 'ids', /* hier ist das wundermittel */
];

$query = new WP_Query( $args );

if ( $query->found_posts ) {
    printf( '<pre>%s</pre>', print_r( $query->posts, true ) );
}Code-Sprache: PHP (php)

So einfach geht das. So sind auch größere Queries kein Problem mehr. Auf einer Kundenseite konnte ich überprüfen, ob der Visual Composer so arbeitet. Leider tut er das nicht, sodass eine Seite mit drei verschiedenen Kategorie-Queries und vielen Beiträgen, schnell lansgam wird und das obwohl nur 3-4 Felder abgerufen werden. Langsam wird die Seite deshalb, weil jedes Mal alle Felder abgerufen werden. Das kannst du also beheben, indem du gezielt die Felder anwählst.

Im Anschluss kannst du dann eigene Meta Felder mit Hilfe der erlangten IDs wie gewohnt ausgeben. Aber auch die Überschriften und andere Details.

foreach ( $query->posts as $post_id ) {
    echo get_the_title($post_id);
    echo get_post_meta( $post_id, 'mein_feld', true );
}Code-Sprache: PHP (php)

Wenn du das Ganze mit einem Cache kombinieren möchtest, ist vielleicht der folgene Beitrag interessiert für dich: Don’t Cache WP_Query Objects

Die Queries können noch schneller gemacht werden, in dem man die Ausgabe der Anzahl der Einträge deaktiviert. Dies ist vor allem nützlich, wenn man keine Pagination benötigt. Hierbei werden die Argumente um ein bestimmtes Argument erweitert:

$args = [
     'post_status'   => 'publish',
     'fields'        => 'ids',
     'no_found_rows' => true, /* hier ist das wundermittel */
 ];Code-Sprache: PHP (php)

Zusatz 12.09.2019: WP_Query und der Object Cache

Du kannst außerdem folgendes in den Query-Array packen, um die Queries noch schneller zu machen – dies ist bei Verwendung von fields nicht notwendig, da WordPress das selbst für dich löst, da ja keine Objekte zurückgegeben werden:

$args                           = [];
$args['no_found_rows']          = true;
$args['update_post_term_cache'] = false;
$args['update_post_meta_cache'] = false;
$args['cache_results']          = false;

$query->wp_query( $args );Code-Sprache: PHP (php)

Weitere Informationen dazu erhältst du direkt im Codex von WordPress.org: WP_Query

WordPress Login individualisieren

Um den WordPress Login anzupassen, gibt es im Codex einen hilfreichen Beitrag. Da dort die Schnipsel alle stehen, kopiere ich sie nicht gleich hier hin.

Makerlog und die eigene Produktivität

Wir haben uns schon zahlreiche Todo und Aufgabenverwaltungstools angesehen. Wir haben Trello, Asana und Co. ausprobiert. Alles funktioniert zwar sehr gut, aber man wird auch einfach dazu verleitet, Dinge vorzuschieben, weil man sich denkt, es gibt aktuell wichtigere Aufgaben.

Das große Problem mit den Tools: Sie sind privat. Das ist auch gut so, denn es muss nicht immer alles an die Öffentlichkeit bzw. interessiert auch nicht wirklich jemanden, zumindest dachte ich das.

Auf Twitter habe ich beim Stöbern im Profil von Flowdee (AAWP) dann die Seite Makerlog entdeckt. Hier kann man sich kostenlos registrieren und seine Todos veröffentlichen. Im Grunde ist es wie eine einfache Todo-Liste, nur eben öffentlich und genau das ist der Grund (zumindest für mich), wieso ich produktiver geworden bin.

Dadurch das ich weiß, dass andere meine Todos sehen (die ich natürlich umschreiben muss, damit man nicht nachvollziehen kann, für wen was ist) versuche ich diese natürlich auch noch am selben Tag zu erledigen. Außerdem steigert man so seinen Rang bei Erfüllung von täglichen Aufgaben. Erledigt man jeden Tag eine Aufgabe, dann steigt der eigene Streak bzw. die Strähne. Ist die Strähne der Woche besonders hoch, wird man in einer Ranglistse dargestellt und macht so automatisch auf sich aufmerksam. Perfekt also, um indirekt mit seiner Arbeit, Werbung zu machen und automatisch produktiver zu werden. Kostenlos.

Mir gefällt die Idee. Der einzige Haken: Es ist eine englische Plattform, also müssen englische Todos her. Aber das ist ja mit Google Tranlaste und anderen Tools kein Problem mehr. Wem das nicht genügt, kann dort natürlich auch die Todos der anderen Mitglieder einsehen. Das regt auch an selbst etwas aktiver zu sein, einfach weil alle anderen es auch sind