Как отладить действия save_post в WordPress? - PullRequest
18 голосов
/ 24 октября 2011

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

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

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

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

Ответы [ 5 ]

17 голосов
/ 04 мая 2012

Лучшим подходом для меня было использование функции для записи значений в 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 );
     }
   }
 }
}

Затем используйте функцию, подобную этойв вашей ловушке save_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
4 голосов
/ 04 августа 2014

Метод 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);
}
2 голосов
/ 24 октября 2011

Лучшее решение, которое я нашел на сегодняшний день, - это сохранение $_POST в переменной сеанса для последующего доступа.

1 голос
/ 12 апреля 2017

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

die(print_r($post_id));

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

var_dump($post_id);

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

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

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

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

0 голосов
/ 23 февраля 2017

Вы также можете сохранить ваши сообщения отладки в опции 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' );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...