Добавить крючки в классе - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь добиться подхода к плагину, основанного на классе, который я сейчас разрабатываю, но не могу понять, как поместить mbf_page () внутри самого класса. Теперь я поместил его вне класса, просто чтобы заставить его работать, но я хочу, чтобы это была публичная c функция класса. Как бы вы это сделали?

<?php

    class Mediabank_Frontend {

      function __construct() {
         add_action('init', array($this, 'mbf_add_menu')); 
      }

      private function init() {
         $this->mbf_add_menu();
      }

      public function mbf_add_menu() {
          add_submenu_page('options-general.php', 'Mediabank settings', 'Mediabank', 
          'manage_options', 'mediabank-settings', 'mbf_page');
      }
}

function mbf_page() {
  echo '<div class="wrap"><h1>Settings</h1></div>';
}

1 Ответ

1 голос
/ 04 февраля 2020

Вы можете использовать тот же способ, что и при вызове функции mbf_admin_menu. Сначала переместите функцию mbf_page() в класс как public function, а затем добавьте ее в аргумент обратного вызова add_submenu_page() в качестве вызываемой функции в «синтаксисе массива»: array($this, 'mbf_page').

class Mediabank_Frontend {

    function __construct() {
        add_action('init', array($this, 'mbf_add_menu')); 
    }

    private function init() {
        $this->mbf_add_menu();
    }

    public function mbf_add_menu() {
        add_submenu_page('options-general.php', 'Mediabank settings', 'Mediabank', 'manage_options', 'mediabank-settings', array($this, 'mbf_add_menu') );
    }

    public function mbf_page() {
        echo '<div class="wrap"><h1>Settings</h1></div>';
    }
}

Что array($this, 'function_name') говорит WordPress (ну, PHP) - добавить function_name из текущего класса вместо вызова его из общедоступной области действия функции.

Вы можете передавать функции обратного вызова в этом синтаксисе массива, в стандартном синтаксисе «имя функции» или даже в виде Закрытие / Анонимная функция :

add_submenu_page( 'parent', 'Title', 'Menu', 'cap', 'slug', 'function_name' ); // Get the globally available `function_name()` function.
add_submenu_page( 'parent', 'Title', 'Menu', 'cap', 'slug', array($this, 'function_name') ); // Get $CurrentClass->function_name() method
add_submenu_page( 'parent', 'Title', 'Menu', 'cap', 'slug', function(){ /* Do stuff */ return false; } ); // callback a defined-inline anonymous function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...