添加了一个要在保存菜单时发布的元框,而调试打开时会抛出警告

时间:2013-01-21 作者:Yaniv Kossas

我已经为post添加了几个元框,以及保存这些框的函数。

保存菜单时(外观->菜单)。它会为每个添加的菜单或子菜单抛出警告Notice: Undefined index: image_price_variation in /home1/xxx/public_html/xx/wp-content/plugins/xxx-shopping-cart/xxx_metabox_functions.php on line 89

虽然我正在保存菜单而不是帖子。

以下是代码的简短版本:

function add_custom_meta_boxes() {  

/*  Adding price meta box to post   */
add_meta_box(  
    \'oap_price_box\',  
    \'Product Price\',  
    \'oap_price_mockup\',  
    \'post\',  
    \'side\',
    \'high\'
); 

// ... 
}
add_action(\'add_meta_boxes\', \'add_custom_meta_boxes\');

/* Prints the price  html mockup */
 function oap_price_mockup( $post ) {
wp_nonce_field( plugin_basename( __FILE__ ), \'image_price_variation\' );
$productPrice = (double)get_post_meta( $post->ID, \'productPrice\', true );
$html  = \'$ <input type="text" size="7" name="productPrice" placeholder="price" value="\'.(($productPrice != \'\') ? $productPrice : \'\').\'" />\';    
echo $html;
}

function save_meta_boxes_post_data( $post ) {
    // verification
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) 
    return;

if ( !wp_verify_nonce( $_POST[\'image_price_variation\'], plugin_basename( __FILE__ ) ) ) // - This is line 89 ..
    return;

if ( \'post\' == $_POST[\'post_type\'] ) {
    if ( !current_user_can( \'edit_post\', $post ) )
        return;
}

$post_ID = $_POST[\'post_ID\'];

/*  Saveing Price*/
if(isset($_POST[\'productPrice\']) && $_POST[\'productPrice\'] != \'\'){
    $price = (double)sanitize_text_field( $_POST[\'productPrice\'] );
    update_post_meta($post_ID, \'productPrice\', $price);
}

}
add_action( \'save_post\', \'save_meta_boxes_post_data\' );
错误来自未显示的nonce字段,但是WP是否在保存后到菜单保存之间进行了分隔?如果是这样的话,我能做些什么来改变我的想法吗?

1 个回复
最合适的回答,由SO网友:bueltge 整理而成

签入您的函数以保存post类型的post元数据,或为$current\\u屏幕保存更好的post元数据。var是一个全局变量,返回一个具有不同标识符的对象进行检查,其中admin页初始化函数。签入函数,如果不是正确的$current\\u screen->id或post\\u类型,则返回。

小提示:使用此plugin 为了便于识别风险值。

另一个示例是检查当前屏幕,如果屏幕不正确,则返回Null。follow源位于函数内部。但是var在数组中有更多项,请根据您的需求使用最佳项。

global $current_screen;

if ( isset( $current_screen->id ) && 
    \'edit.php\' === $current_screen->parent_file ) // check, if on edit post type page
 )
 return NULL;
背景:WordPress也在其他类型上使用post类型和他的挂钩,如附件和导航菜单。

结束

相关推荐

从管理中的特定页面模板中删除Metabox

当用户在管理中编辑特定页面时,我想通过编程删除一些元框。页面本身使用的是一个模板(tpl about.php)。我知道我可以使用此功能从所有页面中删除所有元框:function remove_post_meta_boxes() { if(!current_user_can(\'administrator\')) { remove_meta_box(\'tagsdiv-post_tag\', \'post\', \'normal\'); remove_meta_box(\'