¿Cómo depuro un plugin de WordPress?


Recientemente he heredado un plugin de WordPress que tiene algunos errores en él. Mi problema es que también soy nuevo en WordPress y no sé cómo registrar mensajes de depuración para que pueda averiguar qué está pasando.

Realmente solo necesito una forma de crear una ventana emergente o un registro en una consola.

Author: brasofilo, 2013-01-27

6 answers

Hay una excelente pregunta y respuesta en WordPress Stack Exchange, mucha gente bien informada explicando sus técnicas de depuración: ¿Cómo depurar plugins?

En la arena Javascript básicamente necesitas <script>console.log('the value is' + variable);</script>. Y usa Google Chrome inspector y/o Firebug .

En PHP, depende de dónde están sucediendo las cosas o dónde desea la salida.


Depuración en WordPress

Oficial documentación en el Códice.

Ejemplo wp-config.php para Depurar

// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );

// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );

// Disable display of errors and warnings 
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

// Use dev versions of core JS and CSS files (only needed if you are modifying these core files)
define( 'SCRIPT_DEBUG', true );

Imprimir información en un archivo de registro

Lo siguiente usa una ruta del sistema OSX/Unix/Linux, adjust para Windows.

/* Log to File
 * Description: Log into system php error log, usefull for Ajax and stuff that FirePHP doesn't catch
 */
function my_log_file( $msg, $name = '' )
{
    // Print the name of the calling function if $name is left empty
    $trace=debug_backtrace();
    $name = ( '' == $name ) ? $trace[1]['function'] : $name;

    $error_dir = '/Applications/MAMP/logs/php_error.log';
    $msg = print_r( $msg, true );
    $log = $name . "  |  " . $msg . "\n";
    error_log( $log, 3, $error_dir );
}

Luego, en su código llame a la función my_log_file( $post, 'The post contents are:' );


Imprimir directamente en el Html renderizado

/* Echo variable
 * Description: Uses <pre> and print_r to display a variable in formated fashion
 */
function echo_log( $what )
{
    echo '<pre>'.print_r( $what, true ).'</pre>';
}

Y donde sea necesario usarlo como: echo_log( $post );.


FirePHP

Esta extensión registrará la información directamente en el navegador consola. Consulte las siguientes preguntas y respuestas en WordPress Answers: ¿Cómo usar la extensión WP-FirePHP?.

 16
Author: brasofilo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:17
  1. ¡No desarrolles sin depurar!
  2. Lea esto por favor: http://wp.smashingmagazine.com/2011/03/08/ten-things-every-wordpress-plugin-developer-should-know/

Buena suerte y puede mantenernos actualizados.

 4
Author: Grávuj Miklós Henrich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-26 22:01:37

La estrategia general de depuración de PHP es usar instrucciones print_r( $var ) y actualizar la página. Simple y fácil. Si desea entrar en el código Xdebug es lo que desea instalar.

 2
Author: Chris DaMour,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-18 14:48:47

De acuerdo con su comentario donde Much rather use a system where debug messages can be turned off and on in one place:

Se puede hacer en WordPress. Hay una constante llamada WP_DEBUG que puede establecer en true o false desde su archivo wp-config.php en su carpeta de WordPress (ese archivo donde agrega parámetros de base de datos ).

Entonces, puedes usar:

if( WP_DEBUG ){
echo "<script> alert('Hello World!'); </script>"; 
}

La alerta se mostrará solo cuando tenga WP_DEBUG establecido en true (por ejemplo, en una versión de desarrollo del sitio web como en su localhost), mientras que no se mostrará en su versión de producción del sitio web(Solo tiene que establecer WP_DEBUG a false allí).

 0
Author: RRikesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:31

Mediante el uso de Visual Studio y una extensión de depurador php de dev tools, en realidad puede depurar paso a paso en lugar de registrarlos e intentar averiguar los valores de las variables durante el tiempo de ejecución. Hay otras alternativas.

PS: No es libre: (

 -1
Author: curiousBoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-03 21:58:38

Soy consciente de que mi respuesta viene varios años después de la pregunta original, pero, ya que recientemente tuve el mismo problema exacto y todavía no podía encontrar una solución satisfactoria, codifiqué un plugin para eso.

Aborda específicamente la necesidad de PO:

Realmente solo necesito una forma de crear una ventana emergente o un registro en una consola.

Espero que ayude a todos los desarrolladores de plugins / temas que están buscando una manera rápida y fácil de depurar su código https://wordpress.org/plugins/bugfu-console-debugger

Simplemente instálelo y llame al método de registro desde su código PHP para iniciar sesión directamente en la consola JavaScript del navegador.

BugFu::log($your_string-array-object);
 -2
Author: fedeandri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-25 08:23:00