您可以使用admin_notices
钩
首先定义通知功能:
function my_admin_notice(){
//print the message
echo \'<div id="message">
<p>metabox as errors on save message here!!!</p>
</div>\';
//make sure to remove notice after its displayed so its only displayed when needed.
remove_action(\'admin_notices\', \'my_admin_notice\');
}
您的metabox保存功能基于(如果需要)添加:
...
...
if($errors){
add_action(\'admin_notices\', \'my_admin_notice\');
}
...
...
像我在这里承诺的那样,更新是一个示例,演示了如何从元数据库中添加错误消息
<?php
/*
Plugin Name: one-trick-pony-notice
Plugin URI: http://en.bainternet.info
Description: Just to proof a point using admin notice form metabox
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/
/* admin notice */
function my_admin_notice(){
//print the message
global $post;
$notice = get_option(\'otp_notice\');
if (empty($notice)) return \'\';
foreach($notice as $pid => $m){
if ($post->ID == $pid ){
echo \'<div id="message" class="error"><p>\'.$m.\'</p></div>\';
//make sure to remove notice after its displayed so its only displayed when needed.
unset($notice[$pid]);
update_option(\'otp_notice\',$notice);
break;
}
}
}
//hooks
add_action(\'add_meta_boxes\', \'OT_mt_add\');
add_action(\'save_post\', \'OT_mt_save\');
add_action(\'admin_notices\', \'my_admin_notice\',0);
//add metabox
function OT_mt_add() {
add_meta_box(\'OT_mt_sectionid\', __( \'One Trick Meta Box notice\', \'textdomain\' ),\'OT_mt_display\',\'post\');
}
//display metabox
function OT_mt_display() {
// Use nonce for verification
wp_nonce_field( plugin_basename(__FILE__), \'myplugin_noncename\' );
// The actual fields for data entry
echo \'<label for="myplugin_new_field">\';
_e("leave blank to get a notice on publish or update", \'textdomain\' );
echo \'</label> \';
echo \'<input type="text" id="ot_field" name="ot_field" value="" size="25" />\';
}
//save metabox here is were i check the fields and if empty i display a message
function OT_mt_save( $post_id ) {
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if (!isset($_POST[\'myplugin_noncename\'])) return $post_id;
if ( !wp_verify_nonce( $_POST[\'myplugin_noncename\'], plugin_basename(__FILE__) ) )
return $post_id;
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE )
return $post_id;
if(!isset($_POST[\'ot_field\']) || empty($_POST[\'ot_field\'])){
//field left empty so we add a notice
$notice = get_option(\'otp_notice\');
$notice[$post_id] = "You have left the field empty";
update_option(\'otp_notice\',$notice);
}
}
现在,在查找此代码时,我找到了使用
post_updated_messages
过滤钩子的方式大致相同,因此我也要添加:
<?php
/*
Plugin Name: one-trick-pony-notice2
Plugin URI: http://en.bainternet.info
Description: just like the one above but this time using post_updated_messages hook
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/
//hooks
add_filter(\'post_updated_messages\',\'my_messages\',0);
add_action(\'add_meta_boxes\', \'OT_mt_add\');
add_action(\'save_post\', \'OT_mt_save\');
//add metabox
function OT_mt_add() {
add_meta_box(\'OT_mt_sectionid\', __( \'One Trick Meta Box notice\', \'textdomain\' ),\'OT_mt_display\',\'post\');
}
//display metabox
function OT_mt_display() {
// Use nonce for verification
wp_nonce_field( plugin_basename(__FILE__), \'myplugin_noncename\' );
// The actual fields for data entry
echo \'<label for="myplugin_new_field">\';
_e("leave blank to get a notice on publish or update", \'textdomain\' );
echo \'</label> \';
echo \'<input type="text" id="ot_field" name="ot_field" value="" size="25" />\';
}
//save metabox here is were i check the fields and if empty i display a message
function OT_mt_save( $post_id ) {
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if (!isset($_POST[\'myplugin_noncename\'])) return $post_id;
if ( !wp_verify_nonce( $_POST[\'myplugin_noncename\'], plugin_basename(__FILE__) ) )
return $post_id;
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE )
return $post_id;
if(!isset($_POST[\'ot_field\']) || empty($_POST[\'ot_field\'])){
//field left empty so we add a notice
$notice = get_option(\'otp_notice\');
$notice[$post_id] = "You have left the field empty";
update_option(\'otp_notice\',$notice);
}
}
//messages filter
function my_messages($m){
global $post;
$notice = get_option(\'otp_notice\');
if (empty($notice)) return $m;
foreach($notice as $pid => $mm){
if ($post->ID == $pid ){
foreach ($m[\'post\'] as $i => $message){
$m[\'post\'][$i] = $message.\'<p>\'.$mm.\'</p>\';
}
unset($notice[$pid]);
update_option(\'otp_notice\',$notice);
break;
}
}
return $m;
}