¿Cómo depurar variables dentro de una función en el archivo functions.php?
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?

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

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

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 );
.

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