我试图在id为62的特定页面上添加元框。但我收到通知了Undefined index: post in
第5行,即$post_id= $_GET[\'post\'] ? $_GET[\'post\'] : $_POST[\'post_ID\'];
下面是我正在使用的代码。
<?php
add_action(\'admin_init\',\'contact_meta_init1\');
function contact_meta_init1(){
$post_id= $_GET[\'post\'] ? $_GET[\'post\'] : $_POST[\'post_ID\'];
if($post_id==\'62\'){
add_meta_box(\'contact_meta11\',\'Social icons\',\'social_icon\',\'page\',\'normal\',\'high\');
}
}
function social_icon()
{
global $post;
echo \'<input type="hidden" name="contactmeta_noncename" id="contactmeta_noncename" value="\' .
wp_create_nonce( plugin_basename(__FILE__) ) . \'" />\';
$contact_no = get_post_meta($post->ID, \'_contact_no\', true);
echo \'<label >\';?><?php _e( \'contact_no:\' );?></label>
<?php echo \'<br><textarea name=_contact_no rows="1" cols="90">\'.$contact_no.\'</textarea>\';
}
function contact_meta_save1($post_id, $post) {
if ( !wp_verify_nonce( ($_POST[\'contactmeta_noncename\']), plugin_basename(__FILE__) )) {
return $post->ID;
}
if ( !current_user_can( \'edit_post\', $post->ID ))
return $post->ID;
$contact_meta[\'_contact_no\'] = $_POST[\'_contact_no\'];
foreach ($contact_meta as $key => $value) {
if( $post->post_type == \'revision\' ) return;
$value = implode(\',\', (array)$value); //
if(get_post_meta($post->ID, $key, FALSE)) {
update_post_meta($post->ID, $key, $value);
} else {
add_post_meta($post->ID, $key, $value);
}
if(!$value) delete_post_meta($post->ID, $key);
}
}
add_action(\'save_post\', \'contact_meta_save1\', 1, 2);
?>
我做了一些研究,然后我用这样的isset
$post_id= isset($_GET[\'post\']) ? isset($_GET[\'post\']) : isset($_POST[\'post_ID\']);
这有助于消除通知,但随后会将此元数据库添加到所有页面。
我已经多次使用此代码,但这次不要告诉我出了什么问题。请帮忙。
最合适的回答,由SO网友:fuxia 整理而成
你会得到那个错误,因为$_GET
和$_POST
并不是每个管理页面上都填写了这些数据。此外,您的代码绝不应该依赖全局变量,它们可以被任何其他代码更改,因此它们是不可靠的。所以不要使用global $post;
, $_POST
或$_GET
当你可以从这里这样更好的渠道获得信息时。
使用操作add_meta_boxes
添加元数据库。如果要将metabox限制为仅一种post类型,请使用操作add_meta_boxes_$post_type
.
下面是如何为post类型注册metaboxpage
, 以及如何访问WP_Post
回调函数中的对象:
add_action( \'add_meta_boxes_page\', function( \\WP_Post $post ) {
if ( 62 === (int) $post->ID ) {
add_meta_box( \'contact_meta11\',\'Social icons\',\'social_icon\',\'page\',\'normal\',\'high\' );
}
});
function social_icon( \\WP_Post $post ) {
}
注意:在我的示例中,我写道
\\WP_Post
, 不仅仅是
WP_Post
, 因为该类存在于全局
namespace. 我希望您在代码中使用自己的名称空间。在这种情况下,您必须像我一样编写它,因为其他明智的PHP会尝试在您的命名空间中找到类,但失败了。