Intereting Posts
Сделать URL как / fr / что-то отображаться таким же, как / что-то Есть ли функция для добавления дополнительных параметров на страницу опций Twentyeleven? рамки для панели параметров плагина / темы? dbDelta () Ошибка – неверное имя индекса '' для запроса ALTER TABLE Как вытащить все сообщения, категории или теги в API-интерфейсе WordPress REST простой sql-запрос на wp_postmeta очень медленный Использование метода POST в мета-окне, никаких результатов удаление программ программным путем Могу ли я использовать несколько nav_walkers? Как установить (или задержать загрузку) тегов <script> в отдельных сообщениях по страницам? wp_redirect не работает на странице меню администратора Заменить текст в заголовке Список сообщений по категориям исключить текущую должность Как удалить меню WP из панели администратора? Есть ли способ легко управлять параметрами проекта (настраиваемые поля)

Создание класса с помощью фильтров действий

Я создаю плагин, который отображает вид с вкладками. Способ, которым он в настоящее время работает, – это когда пользователь нажимает на class Loader вкладки class Loader считывает параметр $_GET и создает экземпляр класса, специфичного для этого содержимого табуляции. Теперь, когда у меня это работает, я хочу расширить возможности этого плагина для других. т.е. я хочу, чтобы другой плагин мог создать новый тип табуляции. Каждый из моих классов вкладок получен из абстрактной базы, хотя я могу обойти это, используя if_method_exists() .

Как я могу сделать экземпляр или имя класса, доступного из второго плагина, к моему плагину?

Я хочу, чтобы мой класс Loader имел список имен классов, из которых он может сначала заполнить вкладки, а затем создать экземпляр, когда эта вкладка выбрана.

Solutions Collecting From Web of "Создание класса с помощью фильтров действий"

Создайте какой-то реестр, где другие плагины могут регистрировать новые вкладки. Допустим, ваш обработчик Main_Controller страницы вашего плагина называется Main_Controller :

 class Main_Controller { protected $tabs; public function __construct() { $this->tabs = new Tab_List; do_action( 'register_tabs', $this->tabs ); } public function create_tabs() { $all_tabs = $this->tabs->get_tabs(); if ( empty ( $all_tabs ) ) return; foreach ( $all_tabs as $id => $tab ) { // print the tab } } } 

Tab_List – это список со всеми зарегистрированными вкладками:

 class Tab_List { protected $tabs = array(); public function register( $id, Tab $tab ) { $this->tabs[ $id ] = $tab; } public function get_tabs() { return $this->tabs; } } 

register метода ожидает корректный экземпляр класса Tab :

 class Tab { // Have to be replaced. protected $properties = array( 'tab_title' => 'MISSING TAB TITLE', 'page_title' => 'MISSING PAGE TITLE', 'content_callback' => '__return_false', 'save_callback' => '__return_false' ); public function __set( $name, $value ) { if ( isset ( $this->properties[ $name ] ) ) $this->properties[ $name ] = $value; } public function __get( $name ) { if ( isset ( $this->properties[ $name ] ) ) return $this->properties[ $name ]; } } 

Теперь другие плагины могут зарегистрировать свои вкладки простым крючком:

 add_action( 'register_tabs', function( Tab_List $tab_list ) { $data = new My_Color_Data; $view = new My_Color_View( $data ); $my_tab = new Tab; $my_tab->tab_title = 'Colors'; $my_tab->page_title = 'Set custom colors'; $my_tab->content_callback = array( $view, 'print_tab' ); $my_tab->save_callback = array( $data, 'save_tab' ); $tab_list->register( 'colors', $my_tab ); }); 

Классы My_Color_Data и My_Color_View являются My_Color_View . Я оставляю это до твоего воображения. 🙂

Смотрите также:

  • Как создать API для моего плагина? – некоторые общие замечания об открытых интерфейсах в вашем плагине.
  • Как создать гибкую абстракцию для WP_Query? – советы и примеры для структуры MVC.