所以,我在开发WordPress插件方面并不是全新的,但这是我一直在碰到的东西。开发wordpress的oop插件,找不到函数
我正在制作一个使用面向对象风格的插件。然而,这对我来说是全新的。
我试图做一个管理菜单图标显示在后端。使用功能时这很简单。但不知何故,在OOP中,我得到这个错误:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'ssp_build_hook' not found or invalid function name in /home/example/domains/example.com/public_html/test/wp-includes/plugin.php on line 503
现在,我不知道如何解决这个问题。当我试图调用这个函数时,我曾经想过WordPress没有完全加载。
这是我的主要文件,测试plugin.php:
<?php
namespace SSP;
spl_autoload_register(__NAMESPACE__ . '\\autoload');
function autoload($cls)
{
$cls = ltrim($cls, '\\');
if(strpos($cls, __NAMESPACE__) !== 0)
return;
$cls = str_replace(__NAMESPACE__, '', $cls);
$path = plugin_dir_path(__FILE__) . 'inc' . str_replace('\\', DIRECTORY_SEPARATOR, $cls) . '.php';
require_once($path);
}
class CSSP_Prepare {
function __construct() {
global $wpdb;
$this->tablename = $wpdb->prefix . 'example_table';
$this->fssp_register_hooks();
}
function fssp_register_hooks() {
register_activation_hook(__FILE__, array(&$this, 'fssp_activate'));
register_deactivation_hook(__FILE__, array(&$this, 'fssp_deactivate'));
//register_uninstall_hook(__FILE__, array(&$this, 'fssp_uninstall'));
}
function fssp_activate($wpdb) {
global $wpdb;
if($wpdb->get_var("SHOW TABLES LIKE '" . $this->tablename . "'") != $this->tablename) {
$this->sql = 'CREATE TABLE ' . $this->tablename . ' (id bigint(21) NOT NULL AUTO_INCREMENT, text text, UNIQUE KEY id (id)) ';
require_once(ABSPATH.'wp-admin/includes/upgrade.php');
dbDelta($this->sql);
}
}
function fssp_deactivate() {
}
function fssp_uninstall() {
$this->sql = 'DROP TABLE ' . $this->tablename . '';
require_once(ABSPATH.'wp-admin/includes/upgrade.php');
dbDelta($this->sql);
}
}
new CSSP_Prepare();
class CSSP_Construct {
function __construct() {
$this->build = new CBuild();
}
function fssp_construct() {
$this->build->ssp_init();
}
}
$page_constructor = new CSSP_Construct();
$page_constructor->fssp_construct();
?>
因此,大家可以看到,我想打电话给$this->build->ssp_init()
从CBuild
类。
CBuild代码如下CBuild.php:
<?php
namespace SSP;
class CBuild {
function __construct() {
require_once(ABSPATH . '/wp-load.php');
}
function ssp_init() {
add_action('wp_loaded', 'ssp_build_hook');
}
public function ssp_build_hook() {
add_action('admin_menu', 'ssp_buildpage_hooks');
}
function ssp_buildpage_hooks() {
add_menu_page('SSP Options', 'SSP Options', 'manage_options', 'example_plugin_options', 'ssp_build_options_page', 'dashicons-art');
add_menu_page('SSP Orders', 'SSP Orders', 'manage_options', 'example_plugin_orders', 'ssp_build_orders_page', 'dashicons-cart');
}
function ssp_build_options_page() {
?>
<div class="wrapper">
<form action="options.php" method="post">
<?php settings_fields('ssp_options'); ?>
<?php do_settings_sections('ssp_options_input'); ?>
<?php submit_button(); ?>
</form>
</div>
<?php
}
function ssp_build_orders_page() {
?>
<div class="wrapper">
<form action="options.php" method="post">
<?php settings_fields('ssp_orders'); ?>
<?php do_settings_sections('ssp_orders_input'); ?>
<?php submit_button(); ?>
</form>
</div>
<?php
}
}
?>
所以你可以看到,我打电话test-plugin.php
$this->build->ssp_init();
而这个函数位于CBuild.php
。
此功能包含一个WordPress动作钩子,add_action('wp_loaded', 'ssp_build_hook');
。 但它找不到ssp_build_hook
。
所以我的问题是,为什么找不到ssp_build_hook
?
任何意见,教程,编码改进或问题改进将不胜感激!
令人惊叹!非常感谢你。我是这样做的,但是并不真正理解为什么。现在我做了,再次感谢! – Sj03rs