Ist es möglich, ein Protokoll aller Datenbankabfragen für eine Seitenanforderung in WordPress zu drucken?

Lesezeit: 2 Minuten

Ich erstelle ein Plugin, das eine benutzerdefinierte Abfrage in der WordPress-Datenbank durchführt, und dann gehe ich die Ergebnisse durch, wobei ich jeden Beitragstitel als Link zum eigentlichen Beitrag aufliste.

Ich benutze get_permalink($id) um den URI jedes Beitrags zu erhalten, aber da ich dies außerhalb der Schleife mache, vermute ich, dass jede dieser Anfragen eine separate Datenbankabfrage durchführt.

Ich habe mir den Funktionscode angesehen und versucht zu verfolgen, was in den eigentlichen WordPress-Kerndateien vor sich geht, aber was mich wirklich interessiert, ist ein allgemeiner Weg, dies zu tun, damit ich sicherstellen kann, dass ich immer das meiste schreibe optimierter Code in allen meinen Plugins.

Kennt jemand den besten Weg, dies zu erreichen?

Fügen Sie in wp-config.php diese Zeile hinzu:

define('SAVEQUERIES', true);

In Ihrer Theme-functions.php-Datei (oder einer Plugin-Datei) können Sie Folgendes verwenden:

add_action('shutdown', 'sql_logger');
function sql_logger() {
    global $wpdb;
    $log_file = fopen(ABSPATH.'/sql_log.txt', 'a');
    fwrite($log_file, "//////////////////////////////////////////\n\n" . date("F j, Y, g:i:s a")."\n");
    foreach($wpdb->queries as $q) {
        fwrite($log_file, $q[0] . " - ($q[1] s)" . "\n\n");
    }
    fclose($log_file);
}

Vergewissere dich ABSPATH.'/sql_log.txt' ist beschreibbar von php.

Hoffe das hilft.

  • Vielen Dank! Das ist genau das, wonach ich gesucht habe. Ich habe die Funktion tatsächlich ein wenig modifiziert, da ich eigentlich wollte, dass die Abfrageliste am Ende jeder Seite ausgedruckt wird, aber ohne Ihr Beispiel wäre ich nicht darauf gekommen.

    – Philipp Walton

    11. Januar 2011 um 18:42 Uhr


  • Danke @Poelinca, ich habe auch dieselbe Frage, aber mit dieser Methode bekomme ich nur die SELECT-Abfragen, aber nicht die INSERT/UPDATE-Abfragen. Irgendeine Lösung dafür? Ist es möglich?

    – suiz

    25. Mai 2020 um 12:56 Uhr

  • Du kannst auch einfach die debug.log-Datei von WordPress verwenden, anstatt in eine neue Datei zu schreiben: pastebin.com/jDKbmSDQ Stellen Sie einfach sicher, dass Sie es haben define( 'WP_DEBUG', true ); in der wp-config.php.

    – Gawin

    15. September um 12:37 Uhr

Kann die Antwort von @Poelinca Dorin nicht kommentieren, also bleib einfach hier. Wenn Sie wissen möchten, was Ihre Anfrage startet, fügen Sie einfach dies hinzu

fwrite($log_file, $q[0] . " - ($q[1] s)". " [Stack]: $q[2]" . "\n\n");

stattdessen

fwrite($log_file, $q[0] . " - ($q[1] s)" . "\n\n");

  • Danke für diesen Tipp! Es ist großartig!

    – Kir Mazur

    21. März um 18:31 Uhr

1403520cookie-checkIst es möglich, ein Protokoll aller Datenbankabfragen für eine Seitenanforderung in WordPress zu drucken?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy