Как отлаживать переменные внутри функции в файле functions.php?

3 дек. 2015 г., 16:05:40
Просмотры: 21.5K
Голосов: 5

У меня есть такая функция:

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, как видно в коде выше, но этот текст также не отображается в браузере. Как правильно отладить значения?

0
Все ответы на вопрос 3
2
11

Вы можете просто использовать функцию var_dump() для этого. Вот как я проверяю значения внутри функций и фильтров.

У меня есть следующая строка кода в файле, которую я просто копирую и вставляю, где нужно, чтобы вывести значение переменной:

?><pre><?php var_dump( $variable_to_test ); ?></pre><?php

Теги pre выводят красиво читаемый массив/объект/строку в зависимости от значения. Внутри вашей функции вы можете просто сделать:

?><pre><?php var_dump($ad_posts); ?></pre><?php 

после строки ksort( $ad_posts );.

Просто убедитесь, что вызываете функцию где-нибудь, если она не подключена к какому-либо хуку, иначе ничего не произойдет.

3 дек. 2015 г. 16:24:17
Комментарии

Ооо, понятно, у меня были проблемы с кешем, забыл отключить плагин и/или очистить кеш. В любом случае, спасибо.

ReynierPM ReynierPM
3 дек. 2015 г. 16:37:18

Лучший ответ из всех. Не понимаю, почему люди предлагают такие сложные решения, когда ответ настолько прост. Возможно, это потому что WordPress стал слишком сложным.

dpant dpant
30 июн. 2022 г. 20:05:51
2

Для отладки этих значений вам не обязательно выводить их в браузере. Вместо этого сделайте так:

error_log(ваша-переменная-или-что-угодно);

И проверьте ваш лог ошибок в файле wp-content/debug.log.

Чтобы это работало, у вас должна быть директива define( 'WP_DEBUG_LOG', true ); установлена в файле wp-config.php.

РЕДАКТИРОВАНО: Как отметил @nmr, также требуется define( 'WP_DEBUG', true );.

26 апр. 2019 г. 16:48:10
Комментарии

WP_DEBUG должен быть включен для работы WP_DEBUG_LOG.

nmr nmr
26 апр. 2019 г. 17:10:28

wp-content/debug.log не найден. Это стандартный файл WordPress?

Sgnl Sgnl
8 дек. 2021 г. 02:54:24
0

Правильный и корректный способ сделать это — использовать 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 ) );
26 апр. 2019 г. 20:32:25