首頁>Web>source

好的,所以我正在開發一个插件,其中我的插件檔案是一个類,其中包含与插件初始化相關的所有功能,因此我可以通過啟動该類来簡單地提供所有插件功能.根据各種文件,我以某種方式開發了东西,我將插件的所有功能作為回撥掛接到相應的钩子上.回撥被定義為類中的公共函式,並且回撥是通過類構造函式进行掛钩的.像這樣:

if ( ! class_exists( 'MyPluginClass' ) ) {
  class MyPluginClass {
    public function __construct() {
      add_action( 'admin_menu', array( $this, 'my_admin_menus' );
    }
    public function my_admin_menus() {
      add_menu_page( ... );
    }
  }
}

好的,所有這些都起作用.現在,当再次瀏覽插件時; 我看着最终的插件並看到大約50个公共回撥感到很奇怪.這就是為什麼我試圖通過將例如上面的代碼更改為私有化所有插件主檔案回撥的原因:

if ( ! class_exists( 'MyPluginClass' ) ) {
  class MyPluginClass {
    public function __construct() {
      add_action( 'admin_menu', function() { $this->my_admin_menus(); };
    }
    private function my_admin_menus() {
      add_menu_page( ... );
    }
  }
}

好的,現在不要誤会我的意思,我的問题不是關於這種過渡的,因為有很多帖子都在迴答這个問题.而是這種轉變實際上有多有意義.此外,我還面临几个挑战,其中一个我仍然無法解釋:当我更改使用 register_post_type建立自定義帖子型別的回撥時 从成為 成為 public (完全如上所述,因此我不会在此處粘贴整个巨大的代碼); 支援列將从自定義帖子型別的管理頁面中消失(即不再有作者,標题等列,仅一个表格,每个建立的帖子都有一行,没有列說明).像這樣的問题,以及我需要編寫代碼才能使大多數回撥 private所需的几个难题和解決方法 给我強烈的感覺,wordpress插件開發並非旨在使用私有回撥.是我做錯了,還是我做錯了,將主插件回撥私有化確實更好(就安全性而言)?

private
最新回復
  • 5月前
    1 #

    wordPress掛钩仅適用於全域性函式(或類中的公共函式) -由於私有或受保護的方法的可见性級別不可用,因此不適用於wP呼叫操作或過濾器的方式。

    您想要做的是使用一个包含所有功能的類整理代碼( 在類中稱為方法),這似乎是一个好主意,直​​到您對其进行了檢查-然後您註意到不良的代碼气味-您正在編寫代理OOP-而不是真正的OOP-且這樣做没有什麼正当好處。

    wordPress負有部分责任,但是您的插件設計也負有责任-您需要了解模式並重構您的計划-否則就不行。.因為也许它作為程式代碼比OOP更好...

  • wordpress:重定向到/wp-admin/editphp而不是wp_redirect url
  • wordpress:仅將媒體上傳到資料庫