Как отлаживать действия save_post в WordPress?

У меня есть некоторая персонализированная мета-запись, которая генерируется и готова к добавлению в мета-сообщение. Я знаю, как это сделать, однако save_post вызывает перенаправление после отправки данных POST. Это означает, что я перенаправлен на панель управления и теряю доступ к моим данным POST, поэтому я не могу легко отлаживать.

В настоящее время используется что-то вроде:

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

Есть ли способ легко отладить это?

Ответы

Ответ 1

Лучший подход для меня заключался в использовании функции для регистрации значений в wp-content/debug.log, снятых с http://fuelyourcoding.com/simple-debugging-with-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 );
     }
   }
 }
}

Затем используйте функцию, подобную этой в hook_post:

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

Убедитесь, что wp-content/debug.log доступен для записи, а у вас есть отладка включена в 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

Ответ 2

Способ 1:

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


Способ 2:

создать файл журнала (my_logs.txt) в папке, где вы используете этот код:

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

Ответ 3

Лучшим решением, которое я нашел до сих пор, является сохранение $_POST в сеансе var для доступа позже.

Ответ 4

Вы также можете сохранить свои отладочные сообщения в опции WordPress и показать его как сообщение администратора после перенаправления.

// 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' );
}

Ответ 5

Первый подход:

die(print_r($post_id));

Второй подход:

var_dump($post_id);

Третий подход:

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

Или использовать любые надстройки для браузера для ведения журнала

может помочь одна из трех... Удача