该插件在激活期间生成了意外输出的X个字符(WordPress)

Sco*_*t B 27 php 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' );
Run Code Online (Sandbox Code Playgroud)

接下来,我在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' );
Run Code Online (Sandbox Code Playgroud)

究竟是什么导致了这个错误,我怎样才能有效地完成我的逻辑插件而不必遇到它?

有没有更好的方法来处理这个?

T.T*_*dua 26

2可能的原因:

1)你echo在错误的地方做输出(如或等).

  • 要在admin仪表板中输出消息吗?- admin_notices在那里使用钩子和输出......
  • 您想在前端输出消息吗?-找到钩子适当的地方(如the_contentwp_footer或其他).

  • 不要在register_activation_hookWordPress标准挂钩内外输出任何内容,没有人应该这样做.**

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 19

有同样的错误,但只有6个字符)所以...在我的情况下,我在PHP关闭标签后有空行?> - 这也会导致此错误.


jay*_*lee 16

我认为这里可能存在两个导致问题的问题.首先,我不认为wordpress在调用插件激活挂钩时需要任何输出,所以它可能会抱怨.其次是在wordpress程序流中很早就调用了插件激活挂钩,因此,它可能在发送标头之前被调用.如果在调用之前生成了任何输出,header()那么PHP通常会抱怨.

通常,插件激活例程被保留用于插件的基本设置,对诸如此类set_option()的事物的调用.


Ewa*_*cas 14

我有同样的错误 - 意外输出的3个字符,并在这里领先.对于我的场景中的人,此消息的另一个原因可能是文件类型被编码为带有BOM的UTF.

BOM编码导致错误,并且在插件激活时,它会因此而在Internet Explorer中呈现错误.

解决方案是使用Notepad ++并选择"转换为无BOM的UTF",或者如果您使用的是Visual Studio,则说明如何在没有BOM的情况下更改UTF-8编码


kal*_*azy 7

我和这个问题打了很长时间.通常,这是由开始<?php标记之前或结束?>标记之后的空格或换行引起的.一旦我删除了这些,错误就消失了.

另外,不要假设任何事情GET,POST,COOKIEREQUEST变量.始终先使用isset()或检查empty().


小智 5

在我的情况下,这是由于未定义的索引,只需启用调试日志以检查导致它的原因,然后您就可以轻松解决它。

对于那些不知道如何启用调试日志的人,请在 wp-config.php 中添加这些行:

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_DISPLAY', true );
    define( 'WP_DEBUG_LOG', true );
Run Code Online (Sandbox Code Playgroud)

您可以在 wp-content 中创建的调试文件中正确查看错误