OzT*_*eat 5 php oop wordpress wordpress-plugin
我在WordPress中注册了一个新的管理页面,在那里我显示输出HTML和格式并验证一些输入并保存到数据库中.一切都很棒.什么不是真正有效的是使用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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
管理通知不用于此目的,并且挂钩在您放置它的位置不起作用。为了有选择地触发它,我们使用get_optionor get_user_meta。
对于这种通知,我们使用管理类:
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>';
Run Code Online (Sandbox Code Playgroud)
这是一个帮助插件来设计我们的管理屏幕:WordPress Admin Styles。
或者,使用整个Settings APIadd_settings_error() ,它有一个显示通知的功能,尽管名称如此,但它是用来显示update和error消息的。