我想创建一个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;
}
}
当我激活插件时,我收到如下错误:
我已经阅读了其他用户在此发布的几个问题,这可能是重复的问题,但任何建议的答案都适用于我,包括:
从标签开头删除空格,甚至删除php结束标记:没有改变
在wp_config.php
文件中我将wp_DEBUG
设置为true
,但它没有显示错误
我已将文件转换为UTF8 (without BOM)
未更改
你有没有关注这个问题?
答案 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'));
以及您的插件创建方式,但这是朝着正确方向迈出的一步。如果您复制并粘贴来自您获得此代码的链接的代码,他的代码会显示相同的问题...