首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OOP插件中使用WordPress admin_notices

在OOP插件中使用WordPress admin_notices
EN

Stack Overflow用户
提问于 2013-10-28 18:02:39
回答 1查看 4.3K关注 0票数 5

我已经在WordPress中注册了一个新的管理页面,在这里我显示出输出HTML,格式化并验证一些输入并保存到DB中。一切都很好。真正起不到作用的是使用admin_notices钩子来显示任何错误/更新消息。我猜我不能从add_menu_page函数中调用那个钩子?如果是这样,您应该如何处理OOP插件中自定义页面上的错误?

我已经包含了下面代码的一个非常精简的版本。

代码语言:javascript
复制
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;
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-28 18:36:39

管理员通知不用于此,钩子在您放置的位置也不起作用。为了有选择地触发它,我们使用get_optionget_user_meta

对于这类通知,我们使用管理类:

代码语言:javascript
复制
if( $success )
    echo '<div class="updated"><p>class .updated with paragraph</p></div>';

if( $error )
    echo '<div class="error"><p>class .error with paragraph</p></div>';

这里有一个帮助插件,可以为我们的管理屏幕设置样式:WordPress管理风格

或者,使用整个设置API,它有一个函数add_settings_error()来显示通知,不管名称如何,它都用于显示updateerror消息。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19641898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档