Плагин генерировал X символов неожиданного вывода при активации (WordPress) - PullRequest
24 голосов
/ 02 ноября 2010

Я получаю это сообщение каждый раз, когда активирую свой плагин:

Плагин генерирует 80 символов неожиданного вывода во время активации.Если вы заметили сообщения «заголовки уже отправлены», проблемы с каналами синдикации или другие проблемы, попробуйте деактивировать или удалить этот плагин.

Единственный способ, которым я смог подавить сообщение, - это обернуть мою функцию активациикод в выражении if (см. фрагменты ниже).

Здесь приведен фрагмент кода моего плагина при получении ошибки, описанной выше:

function myPlugin( $post ) {
    echo "Whatever is here throws an unexpected output alert when the plugin isa activated";
}
register_activation_hook( __FILE__, 'myPlugin' );

После этого я обернул функцию в своем плагине в оператор if ;она подавляет предыдущую ошибку, как обсуждалось выше:

function myPlugin( $post ) {
    global $pagenow;
    if ( is_admin() && $pagenow !== 'plugins.php' ) {
        echo "No more alerts when its wrapped this way";
        }
    }
}
register_activation_hook( __FILE__, 'myPlugin' );

Что на самом деле является причиной этой ошибки и как я могу эффективно дополнить свой плагин своей логикой, не сталкиваясь с ним?способ справиться с этим?

Ответы [ 15 ]

22 голосов
/ 19 марта 2015

2, вероятно, причины:

1) Вы делаете вывод (например, echo или т. Д.) В неправильном месте.

  • Хотите вывести сообщение на панели инструментов admin?- используйте admin_notices ловушку и выводите туда ...
  • Хотите вывести сообщение во внешнем интерфейсе?- найдите подходящие места с крючками (например, the_content или wp_footer или что-то еще).

  • Не выводите ничего ни в register_activation_hook, ни вне стандартных ловушек WordPress, нет.это нужно делать. **

2) если вы не делаете никаких намеренных выводов, то, возможно, возникает какая-то ошибка php?Если это так, временно вставьте этот код в functions.php, а затем активируйте плагин - вы увидите ошибку.

define('temp_file', ABSPATH.'/_temp_out.txt' );

add_action("activated_plugin", "activation_handler1");
function activation_handler1(){
    $cont = ob_get_contents();
    if(!empty($cont)) file_put_contents(temp_file, $cont );
}

add_action( "pre_current_active_plugins", "pre_output1" );
function pre_output1($action){
    if(is_admin() && file_exists(temp_file))
    {
        $cont= file_get_contents(temp_file);
        if(!empty($cont))
        {
            echo '<div class="error"> Error Message:' . $cont . '</div>';
            @unlink(temp_file);
        }
    }
}
17 голосов
/ 10 августа 2012

Была та же ошибка, но только с 6 символами) так что ... в моем случае у меня были пустые строки после закрывающего тега PHP?> - это тоже вызовет эту ошибку.

15 голосов
/ 02 ноября 2010

Я думаю, что здесь могут быть две проблемы, которые вызывают проблему.Во-первых, я не думаю, что WordPress ожидает какой-либо вывод при вызове ловушки активации плагина, поэтому он может жаловаться на это.Во-вторых, хуки активации плагинов вызываются довольно рано в потоке программы wordpress, поэтому, вероятно, они вызываются до отправки заголовков.Если ЛЮБОЙ вывод генерируется до вызова header(), тогда PHP обычно жалуется.

Обычно процедура активации плагина резервируется для базовой настройки плагина, вызовов таких вещей, как set_option() и т. П.

14 голосов
/ 26 января 2012

У меня была такая же ошибка - 3 символа неожиданного вывода и приведены здесь. Для людей в моем сценарии другой причиной этого сообщения может быть тип файла, кодируемый как UTF с BOM.

Кодировка спецификации приводила к ошибке, и, хотя плагин активировался, он некорректно отображался в Internet Explorer.

Решение состоит в том, чтобы использовать Notepad ++ и выбрать «Преобразовать в UTF без BOM», или, если вы используете Visual Studio, есть объяснение того, как изменить кодировку UTF-8 без BOM

6 голосов
/ 14 декабря 2012

Я долго боролся с этой проблемой.Обычно это вызвано пробелами или новыми строками перед открывающим тегом <?php или после закрывающего тега ?>.Как только я удалил их, ошибка исчезла.

Кроме того, никогда не предполагайте ничего о GET, POST, COOKIE и REQUEST переменных.Всегда проверяйте сначала, используя isset() или empty().

3 голосов
/ 11 октября 2017

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

Для тех, кто не знает, как включить журнал отладки, добавьте эти строки в ваш wp-config.php:

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_DISPLAY', true );
    define( 'WP_DEBUG_LOG', true );

Вы можете правильно увидеть ошибки в файле отладки, созданном в wp-content

2 голосов
/ 15 декабря 2016

Обычный способ присвоения register_activation_hook - использование статического метода класса.Это гарантирует, что имя функции активации вашего плагина не будет конфликтовать с другими плагинами.

class Foo_Plugin 
{
    public static function plugin_activation() {
        // activation logic
    }
}

Эта функция должна быть общедоступной, а не частной.Однако легко сделать ошибку, поэтому это может стать причиной ваших проблем при получении такого рода ошибки.

Затем вы зарегистрируете активацию с этим кодом в основном файле плагина.

1 голос
/ 27 февраля 2018

У меня была такая же проблема.Я заметил, что в начале файла появились новые строки.Поэтому я удалил их, и ошибки исчезли.Попробуйте удалить новые строки в начале ваших файлов.Это может помочь.

1 голос
/ 21 августа 2017

Сообщение об ошибке The plugin generated *X* characters of unexpected output during activation не очень полезно или, по крайней мере, недостаточно.

Чтобы помочь найти проблему, добавьте их в wp-config.php:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );

Затем проверьте wp-content/debug.log для получения более подробных сообщений об ошибках относительно источника ошибки.

1 голос
/ 17 февраля 2015

У меня была та же проблема, я пытался удалить код и сделал все, но все еще та же проблема

реальное решение для меня было следующее.

  1. вконец файла, который содержит заголовок плагина, я удалил закрывающий php?> и проблема будет решена
  2. в конце файла плагина, который содержит заголовок плагина, удалите лишние разрывы строк послезакрытие php?>

мой файл плагина закончился на строке 69 и после последнего кода php было еще 7 интервалов, так что в редакторе файл был до 66, моя ошибка была "Плагин сгенерировал 7символы неожиданного .... "когда я удалил лишние строки до 69, ошибка исчезла,

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...