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

Author: ReynierPM, 2015-12-03

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 );.

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

 9
Author: Pieter Goosen, 2015-12-03 14:24:17

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

error_log(your-variable-or-whatever);

И проверьте свой журнал ошибок wp-content/debug.log.

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

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

 2
Author: farynaio, 2019-04-26 16:34:32

Правильным и правильным способом сделать это было бы использовать 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 ) );
 2
Author: sMyles, 2019-04-26 17:32:25