Ich erhalte diesen Fehler mit meiner benutzerdefinierten Post-Metabox. Das benutzerdefinierte Posting und die Metabox funktionieren einwandfrei, aber wenn ich das Debuggen aktiviert habe und versuche, eine andere Seite oder einen anderen Beitrag zu speichern, erhalte ich eine Fehlermeldung:
Hinweis: Undefinierter Index: at_nonce in /Users/jay/site/wp-content/themes/mytheme/dogs-post-type.php in Zeile 53
Hinweis: Undefinierter Index: at_nonce in /Users/jay/site/wp-content/themes/mytheme/dogs-post-type.php in Zeile 53
Warnung: Header-Informationen können nicht geändert werden - Header, die bereits von (Ausgabe gestartet unter /Users/jay/site/wp-content/themes/mytheme/dogs-post-type.php:53) in/Users/jay/site/wp- gesendet wurden Includes/pluggable.php in Zeile 876
Mein Code:
<?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']);
}
});
?>
Es ist etwas falsch mit dem Nonce-Feld, aber ich kann nicht herausfinden, was. Wenn es hilft, ist die Codestruktur von Jeffrey Ways The Magic von WordPress Custom Post Types-Kurs.
Dies sind Ihre Problemlinien:
if ( $_POST && !wp_verify_nonce($_POST['at_nonce'], __FILE__) ) {
return;
}
Sie überprüfen, ob $_POST
eingestellt ist, aber Sie überprüfen $_POST['at_nonce']
nicht. Wenn $_POST
eingestellt ist, dieser Schlüssel jedoch nicht, erhalten Sie eine Notice
. Es ist eine einfache Lösung:
if ( isset($_POST['at_nonce']) && !wp_verify_nonce($_POST['at_nonce'], __FILE__) ) {
return;
}
Wenn diese Notice
gedruckt wird, wird der Inhalt an den Browser gesendet. Da dieser Inhalt gesendet wird, bevor die richtigen Header gesendet werden, wird beim Senden dieser richtigen Header die Warnung "Header-Informationen können nicht geändert werden" angezeigt.
at_nonce existiert nicht, wenn ein anderer Beitragstyp gespeichert wird - daher der Hinweis. Sie sollten die Nonce nur überprüfen, wenn Sie bereits den richtigen Post-Typ haben. Versuchen Sie dies zu ersetzen
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']);
}
damit (ungetestet)
if ( isset( $_POST['dogs'] ) && wp_verify_nonce( $_POST['at_nonce'], __FILE__ ) ) {
update_post_meta($post->ID, 'breed_field', $_POST['breed_field']););
}