So, ich bin nicht völlig neu zu entwickeln Plugins in WordPress, aber das ist etwas, auf das ich gestoßen bin.Wordpress oop plugin Entwicklung, kann keine Funktion finden
Ich mache ein Plugin mit dem objektorientierten Stil. Dies ist jedoch völlig neu für mich.
Ich versuche, ein Admin-Menü-Symbol im Back-End anzuzeigen. Dies ist ziemlich einfach, wenn Sie nur die Funktion verwenden. Aber irgendwie, in OOP, bekomme ich diesen Fehler:
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
Jetzt habe ich keine Ahnung, wie das zu beheben. Ich habe darüber nachgedacht, dass WordPress beim Aufruf dieser Funktion nicht vollständig geladen ist.
Das ist meine Hauptdatei, Test-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();
?>
So wie Sie sehen können, ich versuche $this->build->ssp_init()
von der CBuild
Klasse aufzurufen.
CBuild Code ist als CBuild.php folgt:
<?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
}
}
?>
So können Sie sehen, ich rufe $this->build->ssp_init();
in test-plugin.php
und diese Funktion in CBuild.php
befindet.
Diese Funktion enthält einen WordPress-Aktions-Hook, add_action('wp_loaded', 'ssp_build_hook');
. Aber es kann ssp_build_hook
nicht finden.
Also meine Frage ist, warum kann es ssp_build_hook
nicht finden?
Alle Ratschläge, Tutorials, Verbesserungen der Programmierung oder Fragen Verbesserungen würden sehr geschätzt werden!
Erstaunlich! Vielen Dank. Ich kam von Leuten, die es so machten, aber ich verstand nicht wirklich warum. Jetzt tue ich es doch, nochmals vielen Dank! – Sj03rs