插件在激活期间生成了N个意外输出字符

时间:2015-05-28 20:28:21

标签: php wordpress-plugin wordpress-theming wordpress

我想创建一个wordpress插件,只需按照列出的here示例,基于具有外部设置对象的类OOP架构,并按照我自己的方式调整源代码,如下所示: 主插件文件:

<?php
/*
Plugin Name: My Plugin
Description: My Plugin
Version: 1.0
Author: drwhite
Author URL:  drwhite-site
Plugin URL:  drwhite-site/video-ad-overlay
*/

register_activation_hook(__FILE__, array( 'VAO_Setup_File_Inc', 'on_activation'));
register_deactivation_hook(__FILE__, array( 'VAO_Setup_File_Inc', 'on_deactivation'));
register_uninstall_hook(__FILE__, array( 'VAO_Setup_File_Inc', 'on_uninstall'));

add_action('plugins_loaded', array( 'VAO_Setup_File', 'init'));
class VAO_Setup_File{

    protected static $instance;

    public static function init()
    {
        is_null( self::$instance ) AND self::$instance = new self;
        return self::$instance;
    }

    public function __construct()
    {
        add_action( current_filter(), array( $this, 'load_files' ));
    }

    public function load_files()
    {
        foreach ( glob( plugin_dir_path( __FILE__ ).'includes/*.php' ) as $file ){
            include_once $file;
        }
    }
}

在我的插件根目录中,我创建了一个名为includes的子目录,我将设置文件加载到名为setup.class.php的插件加载中:

<?php
class VAO_Setup_File_Inc
{
    public static function on_activation()
    {
        if ( ! current_user_can( 'activate_plugins' ) )
            return;
        $plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
        check_admin_referer( "activate-plugin_{$plugin}" );
    }

    public static function on_deactivation()
    {
        if ( ! current_user_can( 'activate_plugins' ) )
            return;
        $plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
        check_admin_referer( "deactivate-plugin_{$plugin}" );
    }

    public static function on_uninstall()
    {
        if ( ! current_user_can( 'activate_plugins' ) )
            return;
        check_admin_referer( 'bulk-plugins' );

        // Important: Check if the file is the one
        // that was registered during the uninstall hook.
        if ( __FILE__ != WP_UNINSTALL_PLUGIN )
            return;
    }
}

当我激活插件时,我收到如下错误: enter image description here

我已经阅读了其他用户在此发布的几个问题,这可能是重复的问题,但任何建议的答案都适用于我,包括:

  • 从标签开头删除空格,甚至删除php结束标记:没有改变

  • wp_config.php文件中我将wp_DEBUG设置为true,但它没有显示错误

  • 我已将文件转换为UTF8 (without BOM)未更改

你有没有关注这个问题?

1 个答案:

答案 0 :(得分:0)

您收到此错误是因为您的插件正在生成一个PHP错误,该错误正在输出到页面并导致标题已发送错误您看到...代码的问题在于您的功能

public function load_files()
    {
        foreach ( glob( plugin_dir_path( __FILE__ ).'includes/*.php' ) as $file ){
            include_once $file;
        }
    }

没有被及时调用,所以

register_activation_hook(__FILE__, array( 'VAO_Setup_File_Inc', 'on_activation'));

在一个不存在的类中寻找一个不存在的函数。移动你的

foreach ( glob( plugin_dir_path( __FILE__ ).'includes/*.php' ) as $file ){
            include_once $file;
        }
完全在课外,它会加载得很好。可能需要您重新考虑使用

add_action('plugins_loaded', array( 'VAO_Setup_File', 'init'));

以及您的插件创建方式,但这是朝着正确方向迈出的一步。如果您复制并粘贴来自您获得此代码的链接的代码,他的代码会显示相同的问题...