Intereting Posts

Неопределенный индекс: сообщение в уведомлении при добавлении мета-окна

Я пытаюсь добавить мета-окно на определенной странице с id 62. Но я получаю уведомление Undefined index: post in в строке 5, т.е. $post_id= $_GET['post'] ? $_GET['post'] : $_POST['post_ID']; $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']); 

Это помогает избавиться от уведомлений, но затем этот метабокс добавляется ко всем страницам.

Я использовал этот код много раз, но на этот раз не то, что не так. Пожалуйста помоги.

Solutions Collecting From Web of "Неопределенный индекс: сообщение в уведомлении при добавлении мета-окна"

Вы получаете эту ошибку, потому что $_GET и $_POST не заполняются на каждой странице администратора этими данными. Кроме того, ваш код никогда не должен полагаться на глобальные переменные, они могут быть изменены любым другим кодом, поэтому они ненадежны. Поэтому не используйте global $post; , $_POST или $_GET когда вы можете получить информацию из лучших источников, например, здесь.

Используйте действие add_meta_boxes для … ну … добавьте метабокс. Если вы хотите ограничить обмен веществ только одним типом сообщения, используйте действие add_meta_boxes_$post_type .

Вот как вы регистрируете метабокс для page типа сообщения и как обращаться к объекту 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 , потому что этот класс существует в глобальном пространстве имен . Надеюсь, вы используете свое собственное пространство имен для своего кода. В этом случае вам нужно написать его, как я, потому что другой мудрый PHP попытался – и не смог – найти класс в вашем пространстве имен.