Cum se depanează variabilele dintr-o funcție în fișierul functions.php?

3 dec. 2015, 16:05:40
Vizualizări: 21.5K
Voturi: 5

Am această funcție:

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;
    }
}

Trebuie să depanez $ad_posts după ksort() dar rezultatul nu apare în browser. Am testat cu echo pe care îl vedeți acolo și acel text de asemenea nu apare în browser ca output. Cum pot depana valorile în mod corespunzător?

0
Toate răspunsurile la întrebare 3
2
11

Poți folosi simplu var_dump() pentru a face acest lucru. Așa verific eu valorile în interiorul funcțiilor și filtrelor.

Am următoarea linie de cod într-un fișier pe care o copiez și lipesc acolo unde am nevoie pentru a afișa valoarea unei variabile:

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

Tag-urile pre afișează un array/obiect/șir de caractere ușor de citit, în funcție de valoare. În interiorul funcției tale poți face pur și simplu:

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

după ksort( $ad_posts );.

Doar asigură-te că apelezi funcția undeva dacă nu este conectată la vreun hook, altfel nu se va întâmpla nimic.

3 dec. 2015 16:24:17
Comentarii

Ohhh, în regulă, aveam niște probleme cu cache-ul, am uitat să dezactivez pluginul și/sau să curăț cache-ul, oricum mulțumesc

ReynierPM ReynierPM
3 dec. 2015 16:37:18

Cea mai bună soluție de pe aici. Nu înțeleg de ce oamenii oferă soluții atât de complicate când răspunsul este atât de simplu. Poate pentru că WP a devenit atât de complicat.

dpant dpant
30 iun. 2022 20:05:51
2

Pentru a depana aceste valori, nu trebuie să le afișați în browser. În schimb, faceți:

error_log(variabila-sau-orice-altceva);

Și verificați jurnalul de erori în wp-content/debug.log.

Pentru ca această metodă să funcționeze, trebuie să aveți define( 'WP_DEBUG_LOG', true ); setat în fișierul dumneavoastră wp-config.php.

EDITARE: După cum a menționat @nmr, define( 'WP_DEBUG', true ); este de asemenea necesar.

26 apr. 2019 16:48:10
Comentarii

WP_DEBUG trebuie să fie activat pentru ca WP_DEBUG_LOG să funcționeze.

nmr nmr
26 apr. 2019 17:10:28

wp-content/debug.log nu a fost găsit. Este acesta un fișier standard WordPress?

Sgnl Sgnl
8 dec. 2021 02:54:24
0

Modul corect și adecvat de a face acest lucru ar fi folosind XDebug și un fel de IDE care să-l suporte, în timp ce lucrezi la dezvoltare în mod local.

Cea mai ușoară configurație pe care o pot recomanda ar fi utilizarea Local by Flywheel (gratuit) pentru dezvoltarea locală: https://localbyflywheel.com/

Local are o opțiune în cadrul Utilities (pentru un site) pentru a adăuga configurația XDebug în PHPStorm, după ce apeși pe acel buton, redeschide proiectul în PHPStorm și vei vedea o configurație de depanare deja setată pentru acel site.

PHPStorm EAP (eap a fost gratuit anterior) poate fi descărcat de aici (are și o perioadă de încercare de 30 de zile): https://blog.jetbrains.com/phpstorm/2019/04/phpstorm-2019-1-2-preview-191-7141-5/

Documentație privind configurarea XDebug: https://www.jetbrains.com/help/phpstorm/debugging-with-phpstorm-ultimate-guide.html

Poți apoi să setezi un punct de întrerupere în codul tău și să-l inspecționezi folosind XDebug.

Opțiunile de mai sus funcționează într-o situație urgentă, dar modul corect de a depan PHP este utilizarea unui IDE și XDebug și îți va economisi TONURI de timp dacă înveți să o faci în mod corect.

Folosirea error_log:

Pentru a completa răspunsurile altora despre ieșirea error_log, dacă este un array sau ceva care nu este un șir de caractere, cel mai bine este să folosești print_r și să setezi return la true:

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