WordPress add_action внутри класса с обратными вызовами методов - PullRequest
0 голосов
/ 22 апреля 2020

Я создал собственный плагин. То, что я пытаюсь сделать, - это поместить в класс "Hooks" методы создания для add_actions с параметром обратного вызова.

Причина, по которой я это делаю, заключается в том, чтобы легко вызывать WP-хук и хранить все WP-хуки в одном файл и не повторять add_actions в коде.

Как я могу сделать это правильно? Теперь admin_notice не отображается.

namespace Classes;
if( ! defined ('ABSPATH')){ die;} // when user try to direct access the file

class Hooks
{
private $_notice;
private $_wploaded;
private $_init;
private $_Class;


//admin_notices Prints admin screen notices.

public function admin_notices($Class,$call){
$this->_notice = $call;
$this->_Class = $Class;
add_action( 'admin_notices', array( $this->_Class, $this->_notice ) );
}

//wp_loaded After WordPress is fully loaded

protected function wp_loaded($call){
$this->_wploaded = $call;
 add_action( 'wp_loaded', array( $this, $this->_wploaded ) );
}

//init

 protected function init($call){
  $this->_init = $call;
   add_action( 'init', array( $this, $this->_init ) );
  }

}

Затем другой класс

namespace Classes;

if( ! defined ('ABSPATH')){ die;} // when user try to direct access the file

class Core
{
 public  $TypeNotice;
 public  $message;

 // get Message

    public function set_Message( $message ){
        $this->message = $message;
      }

    // show admin notice based on get Message method

     public function show_Message($TypeNotice){
       $this->TypeNotice = $TypeNotice;
       $Hooks = new Classes\Hooks();
       switch ($this->TypeNotice) {
         case 'Error':
           return $Hooks->admin_notices("Classes\Core","show_Message") . '<div class="error notice is-dismissable"><p>'.$this->message.'</p></div>';
           break;

         default:
           return $Hooks->admin_notices("Classes\Core","show_Message") . '<div class="notice notice-success is-dismissible"><p>'.$this->message.'</p></div>';
           break;
       }


     }
}

  $plugin = new Classes\Core();
  $plugin->set_Message("Hi");
  $plugin->show_Message("Error");

1 Ответ

0 голосов
/ 22 апреля 2020

Я нашел решение сделать лучше!

class Notices
{
private $_admin_notice = "admin_notices"; // name of action
private $_message;

// 1. get Message
public function set_Message( $message ){
$this->_message = $message;
}

// 2. define add_action admin notices for method error
public function show_Error(){
add_action( $this->_admin_notice, array( $this, 'set_error_Message') );
}

// 2a. define add_action admin notices for method notice
public function show_Notice(){
add_action( $this->_admin_notice, array( $this, 'set_notice_Message') );
}

// 2b. define add_action admin notices for method notice
public function show_Warning(){
add_action( $this->_admin_notice, array( $this, 'set_warning_Message') );
}

// 3. show admin error based on get Message method
public function set_error_Message(){
echo '<div class="notice notice-error is-dismissable"><p>' . $this->_message . '</p> </div>';
}
// 3a. show admin notice based on get Message method
public function set_notice_Message(){
echo '<div class="notice notice-success is-dismissible"><p>' . $this->_message . '</p></div>';
}
// 3b. show admin warning based on get Message method
public function set_warning_Message(){
echo '<div class="notice notice-warning is-dismissible"><p>' . $this->_message . '</p></div>';
}

}

Затем инициализация класса

  $notice = new Notices();
  $notice->set_Message("Hi");
  $notice->show_Notice();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...