Das Örtchen RSS-Feed
Kategorie
Kategorie: Blog
Buttons & Statistiken
Neueste Kommentare

WordPress: Debugging-Probleme und wie man sie umgeht

Seit einiger Zeit nutze ich in meinen WordPress-Installationen das Plugin Attachment Page Comment Control und mit genau diesem hatte ich gestern ein Problem. Bei der Umsetzung eines neuen Theme-Features in meiner lokalen Entwicklungsumgebung erschien (bei der Nutzung der Mediathek) für wenige Augenblicke eine PHP-Meldung.  Doch wie kann man etwas debuggen, das man nicht wirklich lesen kann? Ich griff in meiner Not zu einem Screenshot, der aber erst im dritten Anlauf klappte.

Die Ausgangssituation

Folgende Zeilen habe ich bei mir immer in der wp-config.php eingetragen:

 define('WP_DEBUG', in_array(php_uname('n'), array('host-name')));
define('SCRIPT_DEBUG', in_array(php_uname('n'), array('host-name')));

Hinweis: Durch diesen Code wird das Debugging von WordPress immer dann aktiv, wenn es sich um meine lokale Entwicklungsumgebung handelt. Der String host-name muss natürlich die korrekte Angabe für Euren Rechner enthalten. Handelt es sich um mehrere Rechner, so packt einfach weitere Angaben ins Array.

Mit aktiviertem Debugging tauchen Meldungen immer in der derzeitigen Ausgabe von WordPress auf. Im Falle der Mediathek kann dies dann auch eine "Seite" sein, die nur sehr kurz auftaucht.

Die Umgehung meiner Debugging-Probleme

Ich muss Gevatter Zufall danken, der mich gestern Abend zu dem Blog-Beitrag Logging Errors In WordPress führte. Hier wird eine Lösung vorgestellt, mit welcher man anstatt sichtbarer Meldungen einfach alles in einem Fehlerlog speichert. Mit leichten Anpassungen sieht das dann bei mir wie folgt aus:

 define('WP_DEBUG', in_array(php_uname('n'), array('host-name')));

if (constant('WP_DEBUG')) {
    define('SCRIPT_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', false);
    @ini_set('display_errors', 0);
} 

Hinweis: Sofern es sich um einen Windows-Rechner handelt, sollte hierdurch problemlos die Datei debug.log im Ordner wp-content erzeugt werden (bei Linux-basiertem Geraffel einfach manuell die Datei anlegen und mit passenden Rechten versehen). Sofern man den Kommentaren eines anderen Beitrags trauen darf, ist sogar eine Änderung der Datei bzw. des Ordners möglich.

Die Lösung

Die gesuchten Meldungen des Plugins tauchten dann auch wie gewünscht im debug.log auf:

PHP Notice:  Undefined index:  comment_status in (...)\wp-content\plugins\attachment-page-comment-control\AttachmentPageCommentControl.php on line 85

PHP Notice:  Undefined index:  ping_status in (...)\wp-content\plugins\attachment-page-comment-control\AttachmentPageCommentControl.php on line 92

Zur Unterdrückung dieser Hinweismeldungen reicht nachfolgende Codeänderung:

 function attachment_fields_to_save($post, $attachment) {
    if (
        isset($attachment['comment_status']) &&
        ($attachment['comment_status'] == 'open')
    ) {
        $post['comment_status'] = 'open';
    }
    else {
        $post['comment_status'] = 'closed';
    }
       
    if (
        isset($attachment['ping_status']) &&
        ($attachment['ping_status'] == 'open')
    ) {
        $post['ping_status'] = 'open';
    }
    else {
        $post['ping_status'] = 'closed';
    }

    return $post;
} 

Fazit

Ein richtiges Debugging sollte immer Datei-basiert ablaufen und somit gefällt mir die neue Lösung schon sehr gut. Im Rahmen der weiteren Recherchen habe ich dann noch ein paar Plugins aufgetrieben, die ich in nächster Zeit einmal testen muss:

Derzeit fehlt mir noch ein Zugriff auf die debug.log über das WordPress-Backend (vorzugsweise mit Dashboard-Integration). Kennt hier jemand ein passendes Plugin?

Hallo! Bist du neu hier? Dann abonniere doch den RSS-Feed dieses nicht mehr ganz so stillen Örtchens, um über meine geistigen Ergüsse auf dem Laufenden zu bleiben. Alternativ besteht auch die Möglichkeit, sich von FeedBurner per E-Mail über meine Ausscheidungen benachrichtigen zu lassen.

Neuen Kommentar schreiben

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Der Inhalt dieses Feldes wird öffentlich zugänglich angezeigt, aber als rel="nofollow" markiert.
Hinweis

Kommentare beleben den Blog! Ich freue mich über jeden Kommentar. Du kannst hier offen Deine Meinung zum Artikel sagen, aber bitte beachte die Netiquette und vermeide es andere zu beleidigen.

Bitte unterlasst es die Kommentare zu SEO-Zwecken zu missbrauchen. Kommentare mit Links, die nicht zu Blogs führen (oder zu Blogs mit Grauzonen-Themen) und/oder Keywords als Namen verwenden, sind nicht erwünscht!

Möchtest Du mir einen Blog-Artikel schmackhaft machen, dann schreib die URL ohne HTML-Tag in den Kommentarbereich und ich werde diesen bei Gefallen verlinken.