¿Cómo depurar acciones save_post en WordPress?

3 minutos de lectura

avatar de usuario
sgb

Se está generando una meta de publicación personalizada y estoy lista para agregarla a la meta de una publicación. Yo sé cómo hacer esto. Sin embargo, save_post provoca una redirección después de que se hayan enviado los datos POST. Esto significa que soy redirigido al tablero y pierdo acceso a mis datos POST; por lo tanto, no puedo depurar fácilmente.

Actualmente estoy usando algo como:

add_action('save_post', 'something_process');

function something_process() {
   if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) 
       return;
   print_r($_POST);
}

¿Hay alguna manera de fácilmente depurar esto?

  • Estoy haciendo: die(print_r($_POST))

    – Tu mas

    22 de marzo de 2012 a las 13:51

  • @Tumas: Su solución parece útil para un rápido depuración Deberías haberlo puesto como responder en lugar de tenerlo como un comentario.

    – Giraldi

    12 de abril de 2013 a las 10:02


  • @gmaggio mis pensamientos exactamente.

    – Bob Gregor

    25 de mayo de 2013 a las 5:47

avatar de usuario
danblaker

El mejor enfoque para mí ha sido usar una función para registrar los valores en wp-content/debug.log, extraídos de http://fuelyourcoding.com/simple-depuración-con-wordpress:

if(!function_exists('log_it')){
 function log_it( $message ) {
   if( WP_DEBUG === true ){
     if( is_array( $message ) || is_object( $message ) ){
       error_log( print_r( $message, true ) );
     } else {
       error_log( $message );
     }
   }
 }
}

Luego usa la función como esta en tu gancho save_post:

log_it($_POST);
log_it('The value for ' . $custom_field . ' is ' . $_POST[$custom_field]);

Asegúrate de que se pueda escribir en wp-content/debug.log y de que tengas habilitada la depuración en wp-config.php:

@ini_set('display_errors',0);
define( 'WP_DEBUG',         true );  // Turn debugging ON
define( 'WP_DEBUG_DISPLAY', false ); // Turn forced display OFF
define( 'WP_DEBUG_LOG',     true );  // Turn logging to wp-content/debug.log ON
define( 'WP_POST_REVISIONS', false); // Disables revision functionality

avatar de usuario
T.Todua

Método 1:

if (isset($_POST)) die(print_r($_POST)); //answer by Tumas

Método 2:

crear archivo de registro (mis_registros.txt) en una carpeta, donde usas este código:

add_action('save_post', 'something_process',11,11);
function something_process() 
{
    print_r($_POST);
    $tmp = fopen(dirname(__file__).'/my_logs.txt', "a+"); fwrite($tmp,"\r\n\r\n".ob_get_contents());fclose($tmp);
}

avatar de usuario
sgb

La mejor solución que he encontrado hasta ahora es almacenar el $_POST en una sesión var para acceder más tarde.

Primer enfoque:

die(print_r($post_id));

Segundo enfoque:

var_dump($post_id);

Tercer enfoque:

<?php
  echo <pre>{whatever you want to echo goes here}</pre>
?>

O tome cualquier complemento del navegador para iniciar sesión en la consola

que uno de los tres ayude… Buena suerte

También puede guardar sus mensajes de depuración en una opción de WordPress y mostrarlos como un mensaje de administrador después de la redirección.

// display all notices after saving post
add_action( 'admin_notices', 'show_admin_notices', 0 );

// your custom save_post aciton
add_action( 'save_post', 'custom_save_post' );

function custom_save_post() {
    store_error_in_notices_option( 'my debug message' );
}

function store_error_in_notices_option( $m ) {
    if ( ! empty( $m ) ) {
        // store error notice in option array
        $notices = get_option( 'my_error_notices' );
        $notices[] = $m;
        update_option( 'my_error_notices', $notices );
    }
}

function show_admin_notices() {
    $notices = get_option( 'my_error_notices' );
    if ( empty( $notices ) ) {
        return;
    }
    // print all messages
    foreach ( $notices as $key => $m ) {
        echo '<div class="error"><p>' . $m . '</p></div>';
    }

    delete_option( 'my_error_notices' );
}

avatar de usuario
mike23

Lo uso para una salida formateada rápida:

die( '<pre>' . print_r( $_POST, true ) . '</pre>');

¿Ha sido útil esta solución?