5

WordPress に新しい管理ページを登録しました。出力 HTML とフォーマットを表示し、いくつかの入力を検証して DB に保存します。すべてうまくいきます。実際に機能していないのは、admin_notices フックを使用してエラー/更新メッセージを表示することです。add_menu_page 関数内からそのフックを呼び出すことはできないと思いますか? もしそうなら、OOP プラグインのカスタム ページのエラーをどのように処理すると思いますか?

以下のコードの非常に簡素化されたバージョンを含めました。

class Fitems_Admin {

    public $admin_notices = array();

    public function __construct(){
        // Register Menus
        add_action( 'admin_menu', array( $this, 'register_menus' ) );
    }

    public function register_menus(){
        add_menu_page( 'fItems', 'fItems', 'administrator', 'fItems', array( $this, 'items' ) );
    }

    public function items(){
        // do stuff, validate input & register any errors, example below
        $this->admin_notices['updated'][] = __( 'item(s) successfully deleted.', 'fItems' );
        // Register errors
        add_action( 'admin_notices', array( $this , 'display_admin_notices' ) );
        // display output;
        echo $output;
    }

    // Just formats and echos any errors in the $this->admin_notices array();
    public function display_admin_notices( $return = FALSE ){
        if( ! empty( $this->admin_notices ) ){
            // Remove an empty and then sort
            array_filter( $this->admin_notices );
            ksort( $this->admin_notices );
            $output = '';
            foreach( $this->admin_notices as $key => $value ){
                // Probably an array but best to check
                if( is_array( $value ) ){
                   foreach( $value as $v ){
                       $output .= '<div class="' . esc_attr( $key ) . '"><p>' . esc_html( $v ) . '</p></div>';
                   }
                } else {
                    $output .= '<div class="' . esc_attr( $key ) . '"><p>' . esc_html( $value ) . '</p></div>';
                }
            }
            if( $return ){
                return $output;
            } else {
                echo $output;
            }
        }
    }
}
4

1 に答える 1