该插件在激活期间生成了X个字符的意外输出(WordPress)2 可能的原因:

2022-08-30 12:32:15

每次激活插件时,我都会收到以下消息:

该插件在激活期间生成了 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

2 可能的原因:

1)你在错误的地方做了一个输出(如或等)。echo

  • 是否要在仪表板中输出消息?- 使用钩子和输出在那里...adminadmin_notices
  • 是否要在前端输出消息?- 找到合适的地方与钩子(如或什么)。the_contentwp_footer

  • 不要在WordPress标准钩子内外输出任何内容,没有人应该这样做。register_activation_hook

2)如果你没有故意做任何输出,那么也许会发生一些错误?如果是这样,请暂时放入此代码,然后激活插件 - 您将看到错误。phpfunctions.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);
        }
    }
}

答案 2

有同样的错误,但只有6个字符)所以...在我的情况下,我在PHP结束标记之后有空行 ? > - 这也会导致这个错误。


推荐