Come eseguire il debug delle variabili all'interno di una funzione nel file functions.php?

3 dic 2015, 16:05:40
Visualizzazioni: 21.5K
Voti: 5

Ho questa funzione:

function wpse_210493_apply_advertising_position( &$posts, $return = false ) {
    $ad_posts = array();

    $content_posts = array_filter(
        $posts,
        function ( $post ) {
            $position = get_post_meta( $post->ID, 'rw_adversiting_position', true );

            if ( empty( $position ) ) {
                return true;
            }

            $ad_posts[ intval( $position ) ] = $post;

            return false;
        } );

    $content_posts = array_values( $content_posts );

    ksort( $ad_posts );

    echo "sdfksfkjshdfsdf";

    foreach ( $ad_posts as $position => $ad ) {
        array_splice( $content_posts, $position, 0, $ad );
    }

    if ( $return ) {
        return $content_posts;
    } else {
        $posts = $content_posts;
    }
}

Ho bisogno di eseguire il debug di $ad_posts dopo il ksort() ma l'output non viene visualizzato nel browser. Ho testato con l'echo che vedete lì e anche quel testo non viene visualizzato come output nel browser. Come posso eseguire correttamente il debug dei valori?

0
Tutte le risposte alla domanda 3
2
11

Puoi semplicemente usare var_dump() per fare questo. È così che controllo i valori all'interno delle funzioni e dei filtri.

Ho la seguente riga di codice in un file che semplicemente copio e incollo dove necessario per visualizzare il valore di una variabile

?><pre><?php var_dump( $variable_to_test ); ?></pre><?php

I tag pre mostrano un array/oggetto/stringa leggibile a seconda del valore. All'interno della tua funzione puoi semplicemente fare

?><pre><?php var_dump($ad_posts); ?></pre><?php 

dopo ksort( $ad_posts );.

Assicurati solo di chiamare la funzione da qualche parte se non è collegata a qualche tipo di hook, altrimenti non succederà nulla

3 dic 2015 16:24:17
Commenti

Ohhh ho capito, avevo alcuni problemi di cache, mi sono dimenticato di disabilitare il plugin e/o svuotare la cache, comunque grazie

ReynierPM ReynierPM
3 dic 2015 16:37:18

La migliore risposta in circolazione. Non capisco perché le persone propongano soluzioni così complicate quando la risposta è così semplice. Forse, è perché WP è diventato così complicato.

dpant dpant
30 giu 2022 20:05:51
2

Per eseguire il debug di questi valori non è necessario visualizzarli nel browser. Piuttosto fai così:

error_log(tua-variabile-o-qualcosa);

E controlla il tuo log degli errori in wp-content/debug.log.

Per far funzionare questo metodo devi avere define( 'WP_DEBUG_LOG', true ); impostato nel tuo wp-config.php.

MODIFICA: Come ha sottolineato @nmr, è richiesto anche define( 'WP_DEBUG', true );.

26 apr 2019 16:48:10
Commenti

WP_DEBUG deve essere abilitato affinché WP_DEBUG_LOG funzioni.

nmr nmr
26 apr 2019 17:10:28

wp-content/debug.log non è stato trovato. È un file standard di WordPress?

Sgnl Sgnl
8 dic 2021 02:54:24
0

Il modo corretto e professionale per farlo sarebbe utilizzare XDebug e un IDE che lo supporti, lavorando in ambiente di sviluppo locale.

La configurazione più semplice che posso consigliare è usare Local by Flywheel (gratuito) per lo sviluppo locale: https://localbyflywheel.com/

Local ha un'opzione nella sezione Utilities (per un sito) per aggiungere la configurazione XDebug a PHPStorm. Dopo aver cliccato quel pulsante, riapri il progetto in PHPStorm e vedrai una configurazione di debug già impostata per quel sito.

PHPStorm EAP (in precedenza la versione EAP era gratuita) può essere scaricato qui (ha anche una prova gratuita di 30 giorni): https://blog.jetbrains.com/phpstorm/2019/04/phpstorm-2019-1-2-preview-191-7141-5/

Documentazione sulla configurazione di XDebug: https://www.jetbrains.com/help/phpstorm/debugging-with-phpstorm-ultimate-guide.html

Potrai quindi impostare un breakpoint nel tuo codice e ispezionarlo usando XDebug.

Le opzioni sopra indicate funzionano in situazioni d'emergenza, ma il modo corretto per eseguire il debug in PHP è utilizzare un IDE e XDebug, e ti farà risparmiare MOLTO tempo se impari a farlo nel modo giusto.

Utilizzo di error_log:

Per ampliare le risposte degli altri sull'output di error_log, se si tratta di un array o qualcosa che non è una stringa, è meglio usare print_r impostando return a true:

error_log( 'MY STUFF: ' . print_r( $something, true ) );
26 apr 2019 20:32:25