Как отлаживать действия 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>
?>
Или использовать любые надстройки для браузера для ведения журнала
может помочь одна из трех... Удача