我向WordPress网站(3.3.1)上传了一个插件,该插件在我的其他网站(3.3.1和3.4)上运行得很好,但当我尝试激活它时,会出现致命错误。当我检查插件的主文件内容进行一些更改并识别错误时,我检测到在代码末尾出现了重复的文件中的一些随机代码。
如果我编辑它并再次保存,另一个随机代码将再次放置在文件的末尾。
任何建议都将不胜感激,即使是关于做更多研究的建议。我真的不知道该怎么检查这个问题。
要添加所需信息的版本:
我测试停用所有插件,并使用211主题,我得到了相同的行为
添加的随机码示例
<?php
/*
Plugin Name: My plugin
Description: desc
Version: 1.0
*/
/**
* Version of WordPress
* @global string $wp_version
*/
global $wp_version;
$exit_msg = __(\'This plugin require WordPress 3.1 or newer\',\'seo-pressor\').\'. <a href="http://codex.wordpress.org/Upgrading_WordPress">\'.__(\'Please update\',\'seo-pressor\').\'</a>\';
if (version_compare($wp_version, "3.1", "<")) {
exit($exit_msg);
}
// Avoid name collisions.
if (!class_exists(\'WPPostsRateKeys\')) {
class WPPostsRateKeys
{
(... long piece of code ...)
}
}
// create new instance of the class
$WPPostsRateKeys = new WPPostsRateKeys();
if (isset($WPPostsRateKeys)) {
// register the activation function by passing the reference to our instance
register_activation_hook(__FILE__, array(&$WPPostsRateKeys, \'install\'));
register_deactivation_hook(__FILE__, array(&$WPPostsRateKeys, \'uninstall\'));
}][
正如您在末尾看到的,添加了“][”,使我的代码失败。
另一个信息:当我使用WordPress编辑插件文件功能打开我的文本文件时,我会在末尾看到随机代码,这将生成我的代码文件,但是如果我使用cPanel文件管理器打开同一个文件,该实用程序会首先要求我进行编码(分配文件UTF-8),并在末尾打开它,而不添加任何额外代码。无论如何,由于这个额外的代码,插件在WordPress中的激活仍然失败。
我已经将文件保存为没有BOM的FTP-8,并遵循http://www.toddlahman.com/the-plugin-generated-x-characters-of-unexpected-output-during-activation 而且不起作用。
当我在WordPress编辑器中打开文件时,会出现随机文本,但当我使用FTP客户端打开同一文件时,不会出现随机文本。
我需要如何编写或保存我的PHP文件以使其正常工作?
提前感谢Leticia
最合适的回答,由SO网友:bueltge 整理而成
检查是否有一个包含多个echo
\'s、 在函数上调用的register_activation_hook
或register_deactivation_hook
.此外-此函数必须使用静态函数。
还有,您是否有可能var_dump()
在你的来源里面?
重要的是不要有输出(如echo
或var_dump
) 插件的激活或停用。这不是激活过程的一部分。WP对此进行检查,并对在include上生成许多字符串的插件发出警告。检查您的输出是否只在正确的输出挂钩上工作,而不是在激活挂钩上工作等等。
此外,还包括使用挂钩的插件plugins_loaded
(或init
作为替代)非vianew
, 这与WordPress堆栈跟踪上的点不同。如以下示例所示:
class WPPostsRateKeys {
static private $classobj;
/**
* Handler for the action \'init\'. Instantiates this class.
*
* @since 2.0.0
* @access public
* @return $classobj
*/
public function get_object() {
if ( NULL === self :: $classobj ) {
self :: $classobj = new self;
}
return self :: $classobj;
}
public function __construct() {
}
}
if ( function_exists( \'add_action\' ) && class_exists( \'WPPostsRateKeys\' ) ) {
add_action( \'plugins_loaded\', array( \'WPPostsRateKeys\', \'get_object\' ) );
}
也可能,但在其他答案和
link 来自问题。
php开始标记前的空白<?php
在文件末尾保留关闭的php标记?>
文件必须编码为Unicode文件,如UTF-8