在OOP主题中扩展WordPress核心类?

时间:2022-01-13 作者:User37849012643

在面向对象的设计中,使用WordPress核心类的最佳方式是什么?

我正在尝试使用$wp_admin_bar 删除几个默认的WordPress设计,但我找不到在哪里添加不会触发错误的$wp\\u admin\\u栏。

下面是我的代码The comments should help to understand what I have tried,以及我的思考过程是什么:

<?php

    defined( \'ABSPATH\' ) or die(\'Nothing to see here\');

// Since wp_admin_bar is a class I probably need to extend to it but I am unsure what 
//file needs to be required to achieve this
class adminPanel {

  //I tried adding it here
  //protected $wp_admin_bar;
  //I also tried public $wp_admin_bar

  //resgister() function is treated as something like a __construct and is called by a 
  //Init class so $wp_admin_bar can\'t be declared global before the class is 
  //instantiated
  public function register(){

      //Remove wordpress logo from top nav
      add_action( \'wp_before_admin_bar_render\', array( $this, \'remove_wp_logo\' ), 0 );


  }

  function remove_wp_logo() {
      //As pointed out in one of the answers "global $wp_admin_bar;" might 
      //be added here but this causes: Parse error: syntax error, 
      //unexpected \'global\' (T_GLOBAL)  
      $wp_admin_bar->remove_menu( \'wp-logo\' );
  }

}
在调用创建此类对象的类之前,我甚至尝试将其添加为全局。

if ( function_exists(\'add_action\') && class_exists(\'Init\')){
   global $wp_admin_bar;
   Init::register_services();
}
我遇到的错误是:

Fatal error: Uncaught Error: Call to a member function remove_menu() on null
我有一种感觉,我没有正确地调用$wp\\u admin\\u bar,但我也可能错误地知道错误的实际原因是什么。

我在这个网站上尝试了其他问题的解决方案,但到目前为止,所有问题都返回了相同的错误。

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我正在尝试使用$wp_admin_bar 删除几个defaultWordPress设计,但我找不到在何处添加不会触发错误的$wp\\u admin\\u bart。

这个wp_before_admin_bar_render hook 不传递admin bar对象,但您可以使用global 像这样,就像Codex的例子一样here:

function remove_wp_logo() {
    global $wp_admin_bar;

    $wp_admin_bar->remove_menu( \'wp-logo\' );
}

SO网友:fuxia

正如Sally指出的,您可以使用全局变量。然而,这使得您的代码更难测试和理解。更好的方法是使用合适的挂钩admin_bar_menu. 像这样:

add_action( \'admin_bar_menu\', function( \\WP_Admin_Bar $wp_admin_bar ) {
    new adminPanel( $wp_admin_bar );    
});
然后在构造函数中获取此对象:

class adminPanel 
{
    private $admin_bar;
    
    public function __construct( \\WP_Admin_Bar $wp_admin_bar )
    {
        $this-admin_bar = $wp_admin_bar;
    }
}
然后,您可以在所有方法中访问此对象,并可以在单元测试中模拟它。

相关推荐

Wp-admin中文本的行高

我管理几个不同的wordpress网站,这些网站有不同的主题、插件和其他特性。我注意到的一件事是,对于其中一些网站,管理区域中文本的行距非常狭窄,就像发生了某种CSS错误一样。而对于其他站点,等效文本显示的标准行高度大约为1.5左右。有没有办法让没有显示此标准线高度的站点这样做?你可以在这两幅图中看到我的意思-第一幅没有标准线高度,第二幅有标准线高度。感谢您的帮助!-----(编辑以澄清:我不需要找出要使用什么CSS hack来正确显示文本-理想情况下,我想找出导致此错误发生的加载是什么。)