it-swarm.com.de

Wie kann ich die Anzahl der Datenbankabfrageaufrufe für diese benutzerdefinierte Homepage verringern?

Ich arbeite am Design eines Blogs mit der folgenden Kategoriehierarchie (nur ein Beispiel).

                                          PARENT
                                             |
                     |------------------------------------------------|
                   Food                                           Fashion
                     |                                                |
          |---------------------|                       |---------------------|
      European                Asian                  European               Asian
          |                     |                       |                     |
    |---------|           |-----------|             |--------|           |--------|
Italian    French      Chinese    Japanese       Italian  French     Chinese   Japanese

Auf der Homepage möchte mein Kunde die drei letzten Beiträge aller Kinder der Stufe 4 anzeigen, daher:

  • Die letzten drei Beiträge von Eltern> Essen> Europäisch> Italienisch
  • Die letzten drei Beiträge von Eltern> Essen> Europäisch> Französisch
  • Die letzten drei Beiträge von Eltern> Essen> Asiatisch> Chinesisch usw.
  • usw.

Mein erster Versuch war so:

$allPosts = new WP_Query('cat=20, 21, 24, 22, 23, 25, 75, 84, 79, 85, 83, 96, 95, 97, 65, 68, 107, 48, 49&showposts=100&order=ASC');

Laut einem Debugging-Plugin wurden 18 Abfragen auf der Seite aufgerufen, aber mir wurde klar, dass ein solcher Aufruf für das, was ich möchte, keinen Sinn macht, da bei einer Kategorie mit 2000 Posts die 100 Posts, die diese Zeile abruft, alle aus derselben Kategorie stammen.

Deshalb habe ich die Anrufe wie folgt aufgeteilt:

$italianFood = new WP_Query('cat=20&showposts=3&order=DESC');
$italianFashion = new WP_Query('cat=21&showposts=3&order=DESC');
$frenchFood = new WP_Query('cat=24&showposts=3&order=DESC');
$frenchFashion = new WP_Query('cat=22&showposts=3&order=DESC');

Dies funktioniert, aber nach dem Aufruf von ALLE Kategorien stieg die Anzahl der Abfrageaufrufe auf die Datenbank auf 260!

Ich werde die Seite mit einem Plugin zwischenspeichern, aber muss ich wirklich mehr als 260 DB-Aufrufe auslösen, um das zu erreichen, was ich will?

4
WPRookie82

Sie können auch einfach eine eigene Abfrage schreiben. Auf diese Weise ist es eine Abfrage pro Kategorie:

global $wpdb;

$query = '
SELECT wpp1.*
FROM ' . $wpdb->posts . ' AS wpp1
LEFT JOIN ' . $wpdb->term_relationships . ' AS wptr1 ON wptr1.object_id = wpp1.ID
WHERE post_type = %s
AND post_status = %s
AND wptr1.term_taxonomy_id = %d
ORDER BY wpp1.post_date DESC
LIMIT %d
';

$query = $wpdb->prepare(
    $query,
    // Args: post type, post status, term taxonomy ID, number of posts
    'post', 'publish', 80, 3
);

$posts = $wpdb->get_results(
    $query,
    ARRAY_A
);
2
NightHawk