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

标签 php wordpress wordpress-theming

<分区>

我想按照列出的示例创建一个 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(无 BOM) 没有任何变化

你关注问题了吗?

最佳答案

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

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'));

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

关于php - 插件在激活期间生成了 N 个字符的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30516499/

相关文章:

php - 使用 GET 变量时分页

wordpress - 在 WP_admin 之外使用 WP_Filesystem

wordpress - WooCommerce Webhook : invalid URL

php - 自定义 WP 主题时,我应该将导航栏放在 `<body>` 标签之前还是之后?

php - Wordpress - 索引页面图像大小调整

php - 具有不同配置的重复 WP 主题

css - Wordpress 子主题样式

php - 在8080端口上使用Magento进行 Elasticsearch

php - SQL错误插入到表中

php - 如何从表中获取最新数据?拉维尔 5.5,MySQL