我目前正在开发一个WordPress插件。 我创建的主类激活和停用插件的所有必要功能、设置和文件,我使用 composer 来管理类的包含。
昨天我将主
psr-4
文件夹从src/
更改为admin/builder/
,这导致了问题。onfeed-facebook\
|---admin\
|---builder
|---Action\
|---RSA\
|---View\
|---OnFeedMain.php
|---vendor\
|---assets\
|---onfeed.php
|---...
我应该指出,编辑
composer.json
文件后,我还运行了 composer dump-autoload
命令...但我仍然收到此错误:
Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, first array member is not a valid class name or object in C:\www\clientwp.local\wp-includes\class-wp-hook.php:310
Stack trace:
#0 C:\www\clientwp.local\wp-includes\class-wp-hook.php(334): WP_Hook->apply_filters('', Array)
#1 C:\www\clientwp.local\wp-includes\plugin.php(517): WP_Hook->do_action(Array)
#2 C:\www\clientwp.local\wp-admin\includes\plugin.php(816): do_action('deactivate_onfe...', false)
#3 C:\www\clientwp.local\wp-admin\plugins.php(209): deactivate_plugins('onfeed-facebook...', false, false)
#4 {main} thrown in C:\www\clientwp.local\wp-includes\class-wp-hook.php on line 310
这是
composer.json
文件:
"autoload": {
"psr-4": {
"Oppimittinetworking\\OnfeedFacebook\\": "admin/builder/"
}
},
"config": {
"optimize-autoloader": true
}
这是
OnFeedMain.php
班级:
namespace Oppimittinetworking\OnfeedFacebook;
use Oppimittinetworking\OnfeedFacebook\Action\ONFActivate;
use Oppimittinetworking\OnfeedFacebook\Action\ONFDeactivate;
use Oppimittinetworking\OnfeedFacebook\RSA\ONFRSAEncrypt;
use Oppimittinetworking\OnfeedFacebook\RSA\ONFRSADecrypt;
class OnFeedMain {
public function __construct() {
ONFActivate::activate();
ONFActivate::register_admin_scripts();
ONFActivate::register_wp_scripts();
}
public function __deactivate() {
ONFDeactivate::deactivate();
ONFDeactivate::unregister_admin_scripts();
ONFDeactivate::unregister_wp_scripts();
}
public static function encrypt_conn() { return new ONFRSAEncrypt(); }
public function decrypt_data() { return new ONFRSADecrypt(); }
}
这是
onfeed.php
文件:
require_once ONFEED_PLUGIN_PATH . '/vendor/autoload.php';
use Oppimittinetworking\OnfeedFacebook\OnFeedMain;
if ( class_exists( 'OnFeedMain' ) )
$onfmain = new OnFeedMain();
// activaion hook
register_activation_hook( __FILE__, array( $onfmain, '__construct' ) );
// deactivation hook
register_deactivation_hook( __FILE__, array( $onfmain, '__deactivate' ) );
这是
ONFActivate.php
和 ONFDeactivate.php
类中的函数: ONFActivate.php
:
namespace Oppimittinetworking\OnfeedFacebook\Action;
class ONFActivate {
public static function activate() {
// No relevant code ...
}
public static function register_admin_scripts() {
add_action( 'admin_enqueue_scripts', array( 'Oppimittinetworking\OnfeedFacebook\Action\ONFActivate', "enqueue_admin" ) );
add_action( 'admin_menu', array( "Oppimittinetworking\OnfeedFacebook\Action\ONFActivate", 'add_admin_pages' ) );
}
public static function add_admin_pages() {
add_menu_page( 'OnFeed Facebook', 'OnFeed Facebook', 'manage_options', 'onfeed_admin_menu', array( 'Oppimittinetworking\OnfeedFacebook\Action\ONFActivate', 'admin_index' ), 'dashicons-facebook-alt', 110 );
}
public static function admin_index() {
require_once plugin_dir_path( __FILE__ ) . '../../admin/builder/index.php';
}
public static function register_wp_scripts() {
// TODO
}
public static function enqueue_admin() {
// Enqueue admin css files
// [email protected]
wp_register_style( "bootstrap", "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" );
wp_enqueue_style( "bootstrap" );
// [email protected]
wp_register_style( "font_awesome", "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" );
wp_enqueue_style( "font_awesome" );
wp_enqueue_style( "onfeed_main_css", plugins_url( "../../assets/css/main.css", __FILE__ ) );
wp_enqueue_style( "onfeed_shortcut_css", plugins_url( "../../assets/css/shortcut.css", __FILE__ ) );
wp_enqueue_style( "onfeed_feedspage_css", plugins_url( "../../assets/css/feedspage.css", __FILE__ ) );
// Enqueue admin js files
// [email protected]
wp_enqueue_script( "jquery_3_7_1-min", plugins_url( "../../assets/js/jquery-3.7.1.min.js", __FILE__ ), null, '3.7.1', array( 'strategy' => 'async' ) );
wp_enqueue_script( "onfeed_function_js", plugins_url( "../../assets/js/function.js", __FILE__ ), null, '2.2.0', array( 'strategy' => 'defer' ) );
wp_enqueue_script( "onfeed_handshake_js", plugins_url( "../../assets/js/handshake.js", __FILE__ ), null, '2.2.0', array( 'strategy' => 'defer' ) );
wp_enqueue_script( "onfeed_shortcut_js", plugins_url( "../../assets/js/shortcut.js", __FILE__ ), null, '2.2.0', array( 'strategy' => 'defer' ) );
wp_enqueue_script( "onfeed_feedspage_js", plugins_url( "../../assets/js/feedspage.js", __FILE__ ), null, '2.2.0', array( 'strategy' => 'defer' ) );
}
public static function enqueue_wp() {
// TODO
}
}
ONFDeactivate.php
:
namespace Oppimittinetworking\OnfeedFacebook\Action;
class ONFDeactivate {
public static function deactivate() {
// Not relevant code ...
}
public static function unregister_admin_scripts() {
add_action( 'admin_dequeue_scripts', array( 'Oppimittinetworking\OnfeedFacebook\Action\ONFDeactivate', "dequeue_admin" ) );
}
public static function unregister_wp_scripts() {
// TODO
}
public static function dequeue_admin() {
// Enqueue admin css files
wp_dequeue_style( "onfeed_main_css" );
wp_dequeue_style( "onfeed_shortcut_css" );
wp_dequeue_style( "onfeed_feedspage_css" );
// Enqueue admin js files
wp_dequeue_script( "onfeed_main_js" );
wp_dequeue_script( "onfeed_shortcut_js" );
wp_dequeue_script( "onfeed_feedspage_js" );
}
public static function dequeue_wp() {
// TODO
}
}
我还要让大家知道,我已经检查过问题是否是由不正确的命名空间引起的,但是你如何才能看到这没有问题。
我还检查了此链接:
但问题依然存在。
提前感谢您的回复。
我已通过更新此行解决了该问题:
If ( class_exists( 'OnFeedMain' ) )
inside onfeed.php
。 If ( class_exists( 'OnFeedMain' ) )
$onfmain = new OnFeedMain();
致:
If ( class_exists( 'Oppimittinetworking\OnfeedFacebook\OnFeedMain') )
$onfmain = new OnFeedMain();