Как отлаживать vars внутри функции на functions.php досье?
У меня есть эта функция:
function wpse_210493_apply_advertising_position( &$posts, $return = false ) {
$ad_posts = array();
$content_posts = array_filter(
$posts,
function ( $post ) {
$position = get_post_meta( $post->ID, 'rw_adversiting_position', true );
if ( empty( $position ) ) {
return true;
}
$ad_posts[ intval( $position ) ] = $post;
return false;
} );
$content_posts = array_values( $content_posts );
ksort( $ad_posts );
echo "sdfksfkjshdfsdf";
foreach ( $ad_posts as $position => $ad ) {
array_splice( $content_posts, $position, 0, $ad );
}
if ( $return ) {
return $content_posts;
} else {
$posts = $content_posts;
}
}
Мне нужно отладить $ad_posts
после ksort()
, но вывод не будет отображаться в браузере. Я провел тест с echo
, который вы видите там, и этот текст также не будет отображаться в браузере в качестве вывода. Как правильно отладить значения?
3 answers
Для этого вы можете просто использовать var_dump()
. Именно так я проверяю значения внутри функций и фильтров.
У меня есть следующая строка кода в файле, которую я просто копирую и вставляю туда, где это необходимо, чтобы сбросить значение переменной
?><pre><?php var_dump( $variable_to_test ); ?></pre><?php
Теги pre
выводят хорошо читаемый массив/объект/строку в зависимости от значения. Внутри вашей функции вы можете просто сделать
?><pre><?php var_dump($ad_posts); ?></pre><?php
После ksort( $ad_posts );
.
Просто обязательно вызовите функцию где-нибудь, если она не подключена к какому-либо крючок, иначе ничего не произойдет
Для отладки этих значений вам не нужно отображать их в браузере. Вместо этого сделайте:
error_log(your-variable-or-whatever);
И проверьте свой журнал ошибок wp-content/debug.log
.
Чтобы это работало, вам необходимо установить define( 'WP_DEBUG_LOG', true );
в вашем wp-config.php
.
РЕДАКТИРОВАТЬ:
Как указал @nmr, define( 'WP_DEBUG', true );
также требуется.
Правильным и правильным способом сделать это было бы использовать XDebug и какую-то среду разработки, которая его поддерживает, во время локальной разработки.
Самая простая настройка, которую я могу порекомендовать, - это использование Local с помощью маховика (бесплатно) для локальной разработки: https://localbyflywheel.com/
Локальный имеет опцию в разделе Утилиты (для сайта), чтобы добавить конфигурацию XDebug в PhpStorm, после нажатия этой кнопки снова откройте проект в PhpStorm, и вы увидите конфигурацию отладки уже настроена для этого сайта.
PhpStorm EAP (eap ранее был бесплатным) можно скачать здесь (также имеет 30-дневную пробную версию): https://blog.jetbrains.com/phpstorm/2019/04/phpstorm-2019-1-2-preview-191-7141-5/
Документы по настройке XDebug: https://www.jetbrains.com/help/phpstorm/debugging-with-phpstorm-ultimate-guide.html
Затем вы можете установить точку останова в своем коде и проверить ее с помощью XDebug.
Приведенные выше варианты действительно работают в критическом состоянии, но правильный способ отладки PHP - это использование IDE и XDebug, и это сэкономит вам массу времени, если вы научитесь делать это правильно.
Использование error_log
:
Чтобы расширить ответы других пользователей о выводе error_log
, если это массив или что-то, что не является строкой, лучше всего использовать print_r
и установить значение return в true
:
error_log( 'MY STUFF: ' . print_r( $something, true ) );