¿Cómo depurar variables dentro de una función en el archivo functions.php?

3 dic 2015, 16:05:40
Vistas: 21.5K
Votos: 5

Tengo esta función:

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

Necesito depurar $ad_posts después del ksort() pero la salida no se muestra en el navegador. He probado con el echo que se ve ahí y ese texto tampoco aparece como salida en el navegador. ¿Cómo puedo depurar los valores correctamente?

0
Todas las respuestas a la pregunta 3
2
11

Puedes simplemente usar var_dump() para hacer esto. Así es como yo reviso los valores dentro de funciones y filtros.

Tengo la siguiente línea de código en un archivo que simplemente copio y pego donde la necesito para mostrar el valor de una variable

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

Las etiquetas pre muestran un array/objeto/string legible dependiendo del valor. Dentro de tu función puedes simplemente hacer

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

después de ksort( $ad_posts );.

Solo asegúrate de llamar a la función en algún lugar si no está enganchada a algún tipo de hook, de lo contrario no pasará nada

3 dic 2015 16:24:17
Comentarios

Ohhh, ahora entiendo. Estaba teniendo problemas de caché, me olvidé de desactivar el plugin y/o limpiar la caché. De todos modos, gracias.

ReynierPM ReynierPM
3 dic 2015 16:37:18

La mejor respuesta que hay por ahí. No entiendo por qué la gente ofrece soluciones tan complicadas cuando la respuesta es tan simple. Quizás, es porque WP se ha vuelto tan complicado.

dpant dpant
30 jun 2022 20:05:51
2

Para depurar estos valores no necesitas mostrarlos en el navegador. En su lugar, haz lo siguiente:

error_log(tu-variable-o-lo-que-sea);

Y revisa tu registro de errores en wp-content/debug.log.

Para que funcione, debes tener define( 'WP_DEBUG_LOG', true ); configurado en tu wp-config.php.

EDITADO: Como señaló @nmr, también se requiere define( 'WP_DEBUG', true );.

26 abr 2019 16:48:10
Comentarios

WP_DEBUG debe estar habilitado para que WP_DEBUG_LOG funcione.

nmr nmr
26 abr 2019 17:10:28

No se encuentra wp-content/debug.log. ¿Es este un archivo estándar de WordPress?

Sgnl Sgnl
8 dic 2021 02:54:24
0

La forma correcta y adecuada de hacer esto sería utilizando XDebug y algún tipo de IDE que lo soporte, mientras trabajas en desarrollo localmente.

La configuración más fácil que puedo recomendar sería usar Local by Flywheel (gratuito) para desarrollo local: https://localbyflywheel.com/

Local tiene una opción en Utilities (para un sitio) para agregar configuración de XDebug a PHPStorm, después de hacer clic en ese botón, reabre el proyecto en PHPStorm y verás una configuración de depuración ya preparada para ese sitio.

PHPStorm EAP (eap solía ser gratuito anteriormente) puede descargarse aquí (también tiene prueba de 30 días): https://blog.jetbrains.com/phpstorm/2019/04/phpstorm-2019-1-2-preview-191-7141-5/

Documentación sobre cómo configurar XDebug: https://www.jetbrains.com/help/phpstorm/debugging-with-phpstorm-ultimate-guide.html

Luego puedes establecer un punto de interrupción en tu código e inspeccionarlo usando XDebug.

Las opciones anteriores funcionan en caso de apuro, pero la forma correcta de depurar PHP es usando un IDE y XDebug, y te ahorrará MUCHO tiempo si aprendes a hacerlo de la manera correcta.

Usando error_log:

Para ampliar las respuestas de otros sobre la salida de error_log, si es un array o algo que no sea un string, es mejor usar print_r y establecer el retorno a true:

error_log( 'MI COSA: ' . print_r( $algo, true ) );
26 abr 2019 20:32:25