web-dev-qa-db-de.com

Undefinierter Index: at_nonce in der verwendeten Post-Metabox

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.

1
jayjay

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.

6
s_ha_dum

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']););
    }
0
vancoder