カスタムポストメタボックスでこのエラーが発生します。カスタム投稿とメタボックスは正常に動作しますが、デバッグをしていて他のページや投稿を保存しようとするとエラーになります。
Notice:未定義のインデックス:/Users/jay/site/wp-content/themes/mytheme/dogs-post-type.phpの53行目のat_nonce
Notice:未定義のインデックス:/Users/jay/site/wp-content/themes/mytheme/dogs-post-type.phpの53行目のat_nonce
Warning:ヘッダ情報は変更できません - /Users/jay/site/wp-の(/Users/jay/site/wp-content/themes/mytheme/dogs-post-type.php:53から始まる出力)によってすでに送信されているヘッダ876行目のincludes/pluggable.php
私のコード:
<?php
// Add new custom post for dogs
function example_dogs_custom_init() {
$args = array(
'label' => 'Dogs',
'public' => true,
'capability_type' => 'post',
'hierarchical' => true,
'has_archive' => true,
'menu_position' => 5,
'supports' => array('title', 'editor'),
'rewrite' => array('slug' => 'pets/dogs', 'with_front' => false)
);
register_post_type( 'dogs', $args );
}
add_action( 'init', 'example_dogs_custom_init' );
// METABOX breed
add_action("add_meta_boxes", 'test_add_post_meta_boxes_breed');
function test_add_post_meta_boxes_breed() {
add_meta_box(
'breed-meta', // Unique ID
'Breed', // Title
'breed_cb', // Callback function
'dogs', // Admin page (or post type)
'side', // Context
'default' // Priority
);
}
function breed_cb() {
global $post;
$breed_input = get_post_meta($post->ID, 'breed_field', true);
// unique identifier, name of hidden field
wp_nonce_field(__FILE__, 'at_nonce');
?>
<label for="breed_field">Breed:</label>
<input type="text" name="breed_field" id="breed_field" value="<?php echo $breed_input; ?>" />
<br><span></span><?php
}
add_action('save_post', function() {
global $post;
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
// security check - nonce
// verify this came from the our screen and with proper authorizarion,
// because save_post can be triggered at other times
if ( $_POST && !wp_verify_nonce($_POST['at_nonce'], __FILE__) ) {
return;
}
if ( isset($_POST['breed_field']) ) {
update_post_meta($post->ID, 'breed_field', $_POST['breed_field']);
}
});
?>
Nonceフィールドには問題がありますが、何がわかりません。それが助けになるなら、コード構造はWordPressカスタム投稿タイプのJeffrey Ways The Magicからのものです。
これらはあなたの問題の行です:
if ( $_POST && !wp_verify_nonce($_POST['at_nonce'], __FILE__) ) {
return;
}
$_POST
が設定されていることを確認しますが、$_POST['at_nonce']
は確認しません。 $_POST
が設定されていてもそのキーが設定されていない場合は、Notice
が返されます。これは簡単な修正です。
if ( isset($_POST['at_nonce']) && !wp_verify_nonce($_POST['at_nonce'], __FILE__) ) {
return;
}
そのNotice
が印刷されると、コンテンツがブラウザに送信されます。そのコンテンツは適切なヘッダが送信される前に送信されているため、それらの適切なヘッダが送信されると、「ヘッダ情報を変更できません」という警告が表示されます。
他の投稿タイプを保存するときにat_nonceは存在しません。あなたがすでに正しい投稿タイプを持っている場合にのみ、ナンスをチェックするべきです。これを交換してみてください
if ( $_POST && !wp_verify_nonce($_POST['at_nonce'], __FILE__) ) {
return;
}
if ( isset($_POST['breed_field']) ) {
update_post_meta($post->ID, 'breed_field', $_POST['breed_field']);
}
これで(未テスト)
if ( isset( $_POST['dogs'] ) && wp_verify_nonce( $_POST['at_nonce'], __FILE__ ) ) {
update_post_meta($post->ID, 'breed_field', $_POST['breed_field']););
}