Onzichtbaar een WordPress website debuggen

Oké, iedereen weet wel dat het niet slim is om dingen als print_r() of andere echo varianten te gebruiken op een live website. Zeker niet als bezoekers het kunnen zien, dat staat erg onprofessioneel.
Maar soms wil je snel even iets checken, dus hoe kunnen we dit nu zo snel maar onzichtbaar mogelijk doen?

Een Wordpress-vriendelijke print_r() functie

Wat we nodig hebben is een WordPress-vriendelijk php functie die de waarde van een variabele kan printen (zoals print_r), maar zonder dat onze websitebezoekers het kunnen zien!
Om het simpel en in stijl van deze website te houden heb ik het de naam print_ar() gegeven. In de meest simpele vorm zag het er zo uit:

1
2
3
4
56
function print_ar( $Data ){
    
    if ( is_user_logged_in() && current_user_can('delete_pages') ) {
        print_r( $Data);            
     }}

De if statement if ( is_user_logged_in() && current_user_can('delete_pages') ) checkt of de huidige gebruiken een admin is. Is dan zo dan, en alleen dan, wordt de waarde van de variabele geprint.

Dit is een leuk begin, maar het kan nog beter. Een handige toevoeging is om de geprinte in <pre> tags in te sluiten. Zodoende wordt een array ook mooi weergegeven.
Wat we ook kunnen doen is om het geheel een CSS class te geven zodat we makkelijk het uiterlijk kunnen aanpassen. Bijvoorbeeld door het goed opvallend te maken voor onszelf.
Een andere toevoeging is om te kijken wat voor type variable we geprint hebben. Want als print_r als resultaat 13 geeft, dan weet je niet of die 13 een string of een integer is. En dat kan een groot verschil maken in de rest van de code.

Als we dit alles toepassen krijgen we zoiets als dit:

1
2
3
4
56
7
8
9
1011
12
13
14
1516
17
18
19
2021
22
23
24
2526
27
function print_ar( $Data ){
    
    if ( is_user_logged_in() && current_user_can('delete_pages') ) {
        
        echo'<div class="ar_var_dump">';        
        if( is_object( $Data ) ){
            echo'<b>OBJECT RESULT:</b><br/>';   
            echo'<pre>';
            print_r( $Data );            echo'</pre>';
        }else if( is_array( $Data ) ){
            echo'<b>ARRAY RESULT:</b><br/>';   
            echo'<pre>';
            print_r( $Data);            echo'</pre>';
        }else if( is_int( $Data ) ){ 
            echo'<b>NUMBER RESULT: '.$Data.'</b><br/>';
        }else if( is_string( $Data ) ){ 
            echo'<b>STRING RESULT: '.$Data.'</b><br/>';        }else{
            echo'<b>RESULT: '.$Data.'</b><br/>';
        }
        
        echo'</div>';     }
}

Het resultaat staat nu in een div met een class zodat we de kleur en dergelijk kunnen aanpassen aan onze wensen.
Daarna volgt een if/else statement waar we uitzoeken om wat voor variabele het gaat. En wanneer we dat weten dan printen we dat samen met de waarde van de variabele.

Print de naam van de variabele

Ik was al erg blij met het resultaat tot nu toe, maar ik miste nog één ding: de naam van de variable, zodat je snel kan zien wat welke waarde heeft.
Helaas gaat dat boven mijn programmeerkennis..., maar gelukkig niet boven mijn Googlekunde. Op stackoverflow.com heb ik een bruikbaar stukje code gevonden. En met wat aanpassingen van mijn kant is dit mijn uiteindelijke WordPress vriendelijke print functie:

1
2
3
4
56
7
8
9
1011
12
13
14
1516
17
18
19
2021
22
23
24
2526
27
28
29
3031
32
33
34
3536
37
38
39
function print_ar( $Data ){
    
    if ( is_user_logged_in() && current_user_can('delete_pages') ) {
        
        echo'<div class="ar_var_dump">';        
        if( ini_get('allow_url_fopen') ) {
            $backtrace= debug_backtrace();
            $backtrace= $backtrace[0];
            $fh= fopen( $backtrace['file'], 'r' ); 
            $line= 0;
            while ( ++$line <= $backtrace['line'] ) $code= fgets( $fh );
            fclose( $fh );
            preg_match( '/' . __FUNCTION__ . 's*((.*))s*;/u', $code, $name );            $varName= trim( $name[1] );
        }else $varName= 'VARIABLE';
        
        if( is_object( $Data ) ){
            echo'<b>OBJECT RESULT OF '.$varName.':</b><br/>';               echo'<pre>';
            print_r( $Data );
            echo'</pre>';
        }else if( is_array( $Data ) ){
            echo'<b>ARRAY RESULT OF '.$varName.':</b><br/>';               echo'<pre>';
            print_r( $Data);
            echo'</pre>';
        }else if( is_int( $Data ) ){ 
            echo'<b>NUMBER RESULT: '.$varName.' = '.$Data.'</b><br/>';        }else if( is_string( $Data ) ){ 
            echo'<b>STRING RESULT: '.$varName.' = '.$Data.'</b><br/>';
        }else{
            echo'<b>RESULT: '.$varName.' = '.$Data.'</b><br/>';
        }        
        echo'</div>';
     }
}

Ik gebruik deze print_ar nu al een tijdje en het bevalt me perfect. Wie weet, misschien gebruik ik het wel nu op deze pagina zonder dat je het ziet! 😉

Om af te sluiten, laten we kijken hoe het resultaat er uit ziet (met mijn CSS styling). We gaan een array en een string printen op deze manier:

1
2
3
4
5
$testArray= array( 'this', 'is', 'an', 'array');
$testString= 'This is a string';
            
print_ar( $testArray );
print_ar( $testString );

En zo ziet dit er dan uit:

wordpress friendly front end debug print_r var dump

print_ar resultaat van een array en een string

 

 

  • Ik heb nooit een opleiding gehad in C, Javascript of PHP, alles wat ik weet komt van Youtube en Google.
    Ik weet dat mijn code vaak korter kan, maar ik geef de voorkeur aan leesbaarheid zodat ik na een jaar mezelf nog snap. Mochten er andere fouten in zitten dan hoor ik het graag.