Как отлаживать переменные внутри функции в файле 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
, как видно в коде выше, но этот текст также не отображается в браузере. Как правильно отладить значения?
Вы можете просто использовать функцию 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(ваша-переменная-или-что-угодно);
И проверьте ваш лог ошибок в файле wp-content/debug.log
.
Чтобы это работало, у вас должна быть директива define( 'WP_DEBUG_LOG', true );
установлена в файле wp-config.php
.
РЕДАКТИРОВАНО:
Как отметил @nmr, также требуется define( 'WP_DEBUG', true );
.

Правильный и корректный способ сделать это — использовать XDebug и какую-нибудь IDE, которая его поддерживает, во время локальной разработки.
Самую простую настройку, которую я могу порекомендовать, — это использование Local by Flywheel (бесплатно) для локальной разработки: https://localbyflywheel.com/
В Local есть опция в разделе Utilities (для сайта) для добавления конфигурации 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( 'МОИ ДАННЫЕ: ' . print_r( $something, true ) );
