在一个自定义插件中,我正在WP中创建一个自定义菜单页面,在主Asset
加载器类中有一个admin_menu
钩子。在一个单独的文件中,我有另一个名为Leads_UI
的类,它包含public static function leads_html()
,用于输出标记以显示在此自定义管理页面上。
如果您在下面的代码中看到register_leads_dashboard
函数,如果我通过同一个类而不是Leads_UI
类调用leads_html
函数,它将按预期工作,并在您位于Leads页面时仅输出html。
但如果我尝试使用来自单独Leads_UI
类Leads_UI::leads_html()
的public static function leads_html()
,则会导致2个错误:
- html在 Jmeter 板中的每一页上输出,并显示在主要内容后面的左上角,
1.当我单击 Jmeter 板中的“潜在客户”页面时,它会抛出404页面未找到错误。
可能是什么问题?我是OOP的新手。
namespace MWS_PLUGIN\Inc;
use MWS_PLUGIN\Inc\Traits\Singleton;
class Assets {
use Singleton;
protected function __construct() {
// Load all critical functions
$this->setup_hooks();
}
protected function setup_hooks() {
//Add a new screen for 'Leads' CPT
add_action( 'admin_menu', [$this, 'register_leads_dashboard'] );
}
public function register_leads_dashboard() {
// This causes unexpected behaviour
add_menu_page( __( 'Leads', 'my-plugin' ), __( 'Leads', 'my-plugin' ), 'manage_options', 'leads-list', Leads_UI::leads_html(), 'dashicons-admin-users', 50 );
// This works perfectly!
//add_menu_page( __( 'Leads', 'my-plugin' ), __( 'Leads', 'my-plugin' ), 'manage_options', 'leads-list', [ $this, 'leads_html' ], 'dashicons-admin-users', 50 );
}
public function leads_html() {
esc_html_e( 'Leads page test', 'my-plugin' );
}
}
Lead_UI
类位于单独的文件中:
namespace MWS_PLUGIN\Inc;
class Leads_UI {
private function __construct(){
}
public static function leads_html() {
esc_html_e( 'Leads page test', 'my-plugin' );
}
}
1条答案
按热度按时间mzmfm0qo1#
add_menu_page()函数的第五个参数具有 callable 类型。
但是,你的代码并没有传递这个可调用对象,而是调用了你的void
Leads_UI::leads_html()
函数,然后把这个函数缺少的返回值传递给add_menu_page()
,所以这个函数在你调用add_menu_page()
的时候被调用了,这不是你想要的。您需要将静态函数指定为可调用函数,如下所示:
给出这样的代码。