X символов, генерируемых плагином WordPress во время активации

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

Плагин генерировал 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' );

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

Есть ли лучший способ справиться с этим?

Ответы

Ответ 1

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

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

Ответ 2

Фрагмент ниже иллюстрирует решение:

register_activation_hook( __FILE__, 'my_activation_func', 999);

function my_activation_func() {
    file_put_contents( ABSPATH . '/my_loggg.txt', ob_get_contents() );
}

Вставьте этот код в наш плагин, чтобы регистрировать любые ошибки, которые могут возникнуть во время его активации (файл my_loggg.txt будет находиться в вашем основном корне, вероятно, public_html, где установлен WP).

Ответ 3

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

Ответ 4

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

Кодирование BOM вызывало ошибку, и, хотя подключаемый модуль активировался, из-за этого он неправильно отображался в Internet Explorer.

Решение состоит в том, чтобы использовать Notepad ++ и выбрать "Преобразовать в UTF без спецификации", или если вы используете визуальную студию, есть объяснение, как изменить кодировку UTF-8 без BOM

Ответ 5

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

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

Ответ 6

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

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

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

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

Ответ 7

Эта проблема может быть решена путем удаления лишних пробелов. Я решил эту проблему для своего кода. Вы можете легко удалить лишние пробелы в Adove Dreamweaver.

Сначала перейдите в edit- > Find and Replace. Или нажмите Ctrl + F. Установите флажок "Использовать регулярное выражение" в разделе "Опции".

Заполните поле "найти" с помощью кода ниже.

[\r\n]{2,}

Заполните поле "Заменить" следующим кодом

\n

Теперь нажмите кнопку "Заменить все". Надеюсь, это сработает.

Ответ 8

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

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

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

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

Спасибо

Ответ 9

иногда это происходит потому, что вы используете <?php ;?> ненужным или используете его, как показано ниже.

;?>

<?php

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

Ответ 10

Я также получил эту проблему, когда я активировал свой плагин

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

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

теперь моя ошибка плагина исчезла.

Ответ 11

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

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

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

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

register_activation_hook( __FILE__, array( 'Foo_Plugin', 'plugin_activation' ) );

Ответ 12

Сообщение об ошибке 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 на более подробные сообщения об ошибках относительно начала ошибки.

Ответ 13

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

Ответ 14

проверьте здесь, чтобы узнать больше информации, которую вы можете использовать:

<?php
     include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); 
            If (is_plugin_active('wshops/init.php'))
            { 
               //Run your plugin includes files or functions
            }

в файле инициализации php.

Ответ 15

Моя проблема заключалась в том, что в основном php файле я добавил в конец файла функцию javascript. Кажется, WordPress перехватывает такую функцию в элементе head. Я экспортировал эту функцию в файл сценария Java.

До:

<?php
/**
* Plugin Name: yyy
* Description: yyy
* Author: yyy
* Author URI: yyy
* Version: yyy
*/

/* many functions here */


function insert_in_header() {
    echo '<script type="text/javascript">',
    "perform_redirection(", '"', get_option('root'), '"', ", ", '"', get_option('redirect_to'), '");',
    '</script>';
}
add_action('wp_head', 'insert_in_header');
?>
<--! PROBLEMS HERE-->
<script type = "text/javascript">
    function perform_redirections(root, redirectionLink) {
      // code here
    }
</script>

После:

<?php
/**
* Plugin Name: yyy
* Description: yyy
* Author: yyy
* Author URI: yyy
* Version: yyy
*/

/* many functions here */

function insert_in_header() {
    // in headscripts.js i put the perform_redirection function 
    echo '<script type="text/javascript" src="', plugins_url('js/headscripts.js', __FILE__ ), '">  </script>';
    echo '<script type="text/javascript">',
    "perform_redirection(", '"', get_option('root'), '"', ", ", '"', get_option('redirect_to'), '");',
    '</script>';
}
add_action('wp_head', 'insert_in_header');
?>