Как избежать неожиданного вывода
При разработке своего плагина можно столкнуться с тем, что при активации появляется сообщение наподобие «Плагин генерировал X символов неожиданного вывода при активации».
Наиболее распространенных причин данной ошибки три:
- Не верно указана кодировка файла;
- После закрывающего php тега стоит пробел или таб;
- Ошибка в коде, например в SQL запросе, при создании таблиц.
Кодировка файла — причина неожиданного вывода
Если у вас ошибка неожиданного вывода в этом, то скорее всего вы пользуетесь программой наподобие Notepad++. Вам не нужно дополнительно указывать BOM(Byte order mark), так как он уже определен. Поэтому в качестве кодировки укажите UTF-8 без BOM.
Нечитаемый символ после закрывающего тега
Если в файле не предполагается вывод данных, то вам не нужно в конце файла указывать ?>
. Например файл не является шаблоном, а вывод осуществляется только из функций.
После того, как вы закрыли php тег, а потом случайно добавили пробел, то он будет выведен. Это и станет причиной ошибки, так как был осуществлен вывод. Поэтому, создавая файлы, без непосредственного вывода, не завершайте их закрывающим php тегом. Просто не закрывайте тег и все.
Пример неправильного завершения файла, не являющегося шаблоном:
<?php
function someName(){
// код файла
}
?>
Правильный пример:
<?php
function someName(){
// код файла
}
Так как тег php не закрыт, все пробелы, переводы строки и прочие не читаемые символы, не являющиеся операторами будут игнорироваться и не будут считаться выводом.
Ошибка в коде
Для отлова ошибки в коде необходимо включить вывод ошибок. В файле wp-config.php
добавьте следующие значения:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
В этом случае все ошибки сервера попадут в лог. Расположение этого файла зависит от настроек, обычно он в папке wp-content
.
Вы можете создать отдельный файл, для отлова данный ошибки:
function create_error_log() {
$out = ob_get_contents();
if ( ! empty( $out ) ) {
file_put_contents( ABSPATH . '/error_log_' . date( 'Y_m_d_H_i_s' ) . '.html', $out );
}
}
Функцию нужно выполнить после того, как отработали другие функции, которые срабатывают при активации плагина:
function activation() {
// код каких-то функций тут
get_error_log();
}
register_activation_hook( __FILE__, 'activation' );
При возникновении ошибки, в корне сайта будет создаваться файл с именем error_log_<дата и время активации>.html
. Файл будет содержащий данные об ошибке неожиданного вывода.