每次激活插件时,我都会收到此消息:
插件在激活期间生成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' );
究竟是什么原因造成了这个错误,我怎样才能有效地使用我的逻辑完成我的插件而不必遇到它?
有没有更好的方法来解决这个问题?
答案 0 :(得分:21)
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);
}
}
}
答案 1 :(得分:15)
有相同的错误,但只有6个字符) 所以...在我的情况下,我在PHP结束标记后有空行?&gt; - 这也会导致此错误。
答案 2 :(得分:14)
我有同样的错误 - 意外输出的3个字符,并在这里领先。对于我的场景中的人,此消息的另一个原因可能是文件类型被编码为带有BOM的UTF。
BOM编码导致错误,而插件已激活,因此会在Internet Explorer中呈现错误。
解决方案是使用Notepad ++并选择“转换为无BOM的UTF”,或者如果您使用的是visual studio,则说明如何更改编码UTF-8 without BOM
答案 3 :(得分:14)
我认为这里可能存在两个导致问题的问题。首先,我不认为wordpress在调用插件激活挂钩时需要任何输出,所以它可能会抱怨。其次是在wordpress程序流中很早就调用了插件激活挂钩,因此,它可能在发送标头之前被调用。如果在调用header()
之前生成了任何输出,那么PHP通常会抱怨。
通常,插件激活例程保留用于插件的基本设置,调用set_option()
之类的内容。
答案 4 :(得分:6)
我和这个问题打了很长时间。通常,这是由打开<?php
标记之前或结束?>
标记之前的空格或换行引起的。一旦我删除了这些,错误就消失了。
此外,永远不要假设GET
,POST
,COOKIE
和REQUEST
个变量。请务必先使用isset()
或empty()
进行检查。
答案 5 :(得分:3)
在我的情况下,这是由于未定义索引,只需启用调试日志来检查导致它的原因,然后您可以轻松解决它。
对于那些不知道如何启用调试日志的人,请在wp-config.php中添加以下行:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_DEBUG_LOG', true );
您可以在wp-content
中创建的调试文件中正确查看错误答案 6 :(得分:2)
分配register_activation_hook的常用方法是使用类的静态方法。这可确保您的插件激活功能名称不会与其他插件发生冲突。
class Foo_Plugin
{
public static function plugin_activation() {
// activation logic
}
}
此功能需要公开而非私密。但是很容易出错,所以这可能是你在遇到这种错误时出现问题的原因。
然后,您将在主插件文件中使用此代码注册激活。
register_activation_hook( __FILE__, array( 'Foo_Plugin', 'plugin_activation' ) );
答案 7 :(得分:2)
对于初学者来说,开发人员必须在php标记“?>”关闭后使用空换行符。 然后尝试删除所有空的换行符。
答案 8 :(得分:1)
有时这是因为您使用<?php ;?>
不必要或使用它如下所示
;?>
<?php
关闭和开始标记之间的这一额外行也可能导致此错误,简单地删除该行/空格
答案 9 :(得分:1)
可以通过删除多余的空格来解决此问题。我为我的代码解决了这个问题。您可以在Adove Dreamweaver中轻松删除多余的空格。
首先,转到编辑 - &gt;查找和替换。或者按Ctrl + F.选中“选项”部分中的“使用正则表达式”按钮。
使用以下代码填写“查找”字段
[\r\n]{2,}
使用以下代码填写“替换”字段
\n
现在点击“全部替换”按钮。 希望它会奏效。
答案 10 :(得分:1)
我遇到了同样的问题,我试图删除代码并做了所有事情,但仍然是同样的问题
对我来说真正的解决方案如下。
我的插件文件在第69行结束,并且在最后一个php代码之后有7个间隔,因此在编辑器中文件最多为66,我的错误是“插件生成7个字符的意外....”当我删除了多达69行的额外行,错误消失了,
由于
答案 11 :(得分:1)
错误消息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
以获取有关错误来源的更详细错误消息。
答案 12 :(得分:1)
我遇到了同样的问题。我注意到文件开头有新行。所以我删除了它们,错误消失了。尝试删除文件开头的新行。这可能有所帮助。
答案 13 :(得分:0)
在我的例子中,我在开始 <?php
标签之前添加了额外的空格,虽然这是一个有线错误
答案 14 :(得分:0)
插件意外输出错误的初见清单。
?>
。<?php
前的空格答案 15 :(得分:0)
我遇到了同样的问题,我只是将私有函数更改为静态函数并解决了。
private function db_setup() { ....
到
static function db_setup() { ....
我希望这会有所帮助...
答案 16 :(得分:0)
在尝试了每个答案但仍然很短后,我发现我的问题与这里的所有答案都不同。
基本上,意外字符来自我在 MAMP 服务器上的错误日志。错误未显示在前端或 Wordpress 安装错误日志中,即使 php.ini 中有 MyHtmlHelpers
、WP_DEBUG
和 WP_DEBUG_DISPLAY
我最终知道这是一个导致 umm 错误的错误,所以我深入挖掘并在位于 display_errors = On
php_error.log
中发现了一些错误
修复了错误,激活后来自 wordpress 的消息消失了。
答案 17 :(得分:0)
在记事本中打开PHP文件并以ANSI编码保存对我来说是个窍门。即使以后我在Visual Studio Code中打开并将其保存后,它也不会再次发生此问题。
感谢Todd
答案 18 :(得分:0)
只需将激活钩子上要调用的函数设为静态
答案 19 :(得分:0)
对我来说,有一种错误在调试过程中被误吞而未被捕获
如果在本文中听到这篇文章,解释了如何确定此false
实际上是什么
output
现在有了它,您可以在调试过程中回显它或对其进行检查,以了解到底出了什么问题,对我来说,这是数据库脚本的问题。
信用以下文章
https://www.toddlahman.com/the-plugin-generated-x-characters-of-unexpected-output-during-activation/
答案 20 :(得分:0)
我的问题是在主要的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');
?>
答案 21 :(得分:0)
当我激活我的插件时,我也遇到了这个问题
插件在激活期间生成了1个意外输出字符。如果您发现“已发送标头”消息,联合供稿问题或其他问题,请尝试停用或删除此插件。
通常这是由开始标记之前的空格或换行引起的。一旦我删除了这些,错误就消失了。
现在我的插件错误消失了。
答案 22 :(得分:0)
检查here以查看可以使用的更多信息:
<?php
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
If (is_plugin_active('wshops/init.php'))
{
//Run your plugin includes files or functions
}
在你的init php文件中。