Je reçois cette erreur avec mon post personnalisé metabox. La publication personnalisée et metabox fonctionnent bien, mais si je dois déboguer et quand j'essaie de sauvegarder une autre page ou une publication, j'obtiendrai une erreur:
Avis: Index non défini: at_nonce dans /Users/jay/site/wp-content/themes/mytheme/dogs-post-type.php à la ligne 53.
Avis: Index non défini: at_nonce dans /Users/jay/site/wp-content/themes/mytheme/dogs-post-type.php à la ligne 53.
Avertissement: impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à /Users/jay/site/wp-content/themes/mytheme/dogs-post-type.php:53) dans/Users/jay/site/wp- includes/pluggable.php à la ligne 876
Mon 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']);
}
});
?>
Il y a quelque chose qui cloche dans le champ nonce mais je ne peux pas comprendre quoi. Si cela vous aide, la structure du code est tirée du cours sur les types de publications personnalisées WordPress de Jeffrey Ways.
Ce sont vos lignes de problèmes:
if ( $_POST && !wp_verify_nonce($_POST['at_nonce'], __FILE__) ) {
return;
}
Vous vérifiez que $_POST
est défini, mais vous ne cochez pas $_POST['at_nonce']
. Si $_POST
est défini mais que cette clé ne l’est pas, vous obtiendrez une Notice
. C'est une solution simple:
if ( isset($_POST['at_nonce']) && !wp_verify_nonce($_POST['at_nonce'], __FILE__) ) {
return;
}
Lorsque cette Notice
est imprimée, le contenu est envoyé au navigateur. Étant donné que ce contenu est envoyé avant que les en-têtes appropriés ne soient envoyés, vous recevez l'avertissement "Impossible de modifier les informations d'en-tête".
at_nonce n'existe pas lorsque vous enregistrez un autre type de message - d'où l'avis. Vous ne devriez vérifier le nonce que si vous avez déjà le bon type de message. Essayez de remplacer ceci
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']);
}
avec cela (non testé)
if ( isset( $_POST['dogs'] ) && wp_verify_nonce( $_POST['at_nonce'], __FILE__ ) ) {
update_post_meta($post->ID, 'breed_field', $_POST['breed_field']););
}