Рубрики
Wordpress

Плагин создал X символов неожиданного вывода при активации в WordPress

Как избежать неожиданного вывода

При разработке своего плагина можно столкнуться с тем, что при активации появляется сообщение наподобие “Плагин генерировал X символов неожиданного вывода при активации”.

Наиболее распространенных причин данной ошибки три:

Кодировка файла – причина неожиданного вывода

Если у вас ошибка неожиданного вывода в этом, то скорее всего вы пользуетесь программой наподобие Notepad++. Вам не нужно дополнительно указывать (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__contents();
	if ( ! empty( $out ) ) {
		file_put_contents( ABSPATH . '/error_log_' . ( 'Y_m_d_H_i_s' ) . '.', $out );
	}
}

Функцию нужно выполнить после того, как отработали другие функции, которые срабатывают при активации плагина:

function activation() {
    // код каких-то функций тут
    get_error_log();
}

register_activation_( __FILE__, 'activation' );

При возникновении ошибки, в корне сайта будет создаваться файл с именем error_log_<дата и время активации>.html. Файл будет содержащий данные об ошибке неожиданного вывода.