Aktualisieren von Post-Meta für benutzerdefinierte Post-Typen

Ich schreibe ein Plugin für die Arbeit (still) und habe noch ein Problem.

Ich habe meine Meta-Boxen nach Bedarf hinzugefügt. Das Problem, das ich habe, tritt jedoch beim Speichern des Posts auf. Meine Schnipsel zum Speichern von ziemlich viel kommen von diesem Beitrag . Ich habe auch eine ähnliche Antwort hier erhalten , aber es funktioniert einfach nicht aus irgendeinem Grund. : /

protected function __update_post_meta( $post_id, $field_name, $value = '' ) { if ( empty( $value ) OR ! $value ) { delete_post_meta( $post_id, $field_name ); } elseif ( ! get_post_meta( $post_id, $field_name ) ) { add_post_meta( $post_id, $field_name, $value ); } else { update_post_meta( $post_id, $field_name, $value ); } } 

Das obige wird unter Verwendung des folgenden aufgerufen. Ich bin mir jedoch nicht sicher, ob mein Problem in der tatsächlichen Ersparnis liegt, wenn ich daran denke. Ich denke, es könnte das nonce sein, das es nonce könnte.

  public function _wp_save_post( $post_id, $post ) { if ( empty($_POST) OR !isset($_POST['argus_edit_visitor']) OR !wp_verify_nonce( $_POST['argus_edit_visitor'], 'argus_edit_visitor' ) ) { return $post->ID; } if ( ! current_user_can( 'edit_post', $post->ID ) ) return $post->ID; // v_f_name | v_l_name | v_workstation | v_id // Argh! $this->__update_post_meta( $post->ID, 'v_f_name', $_POST['v_f_name'] ); $this->__update_post_meta( $post->ID, 'v_l_name', $_POST['v_l_name'] ); $this->__update_post_meta( $post->ID, 'v_workstation', $_POST['v_workstation'] ); $this->__update_post_meta( $post->ID, 'v_id', $_POST['v_id'] ); } 

Das Nonce wird wie folgt verwendet: und erstellt mit $nonce = wp_create_nonce( plugin_basename( __FILE__ ) ); . Das Eingabefeld befindet sich innerhalb des Blocks von HTML, der in der Variable $ html gespeichert wird. Stackexchange analysierte meinen HTML-Code, sonst würde ich ihn hier einfügen.

-Zack

EDIT: Habe es gerade getestet, und es ist die Schuld des Nonce.
EDIT2: Tipperrors meinerseits, funktioniert aber immer noch nicht.

Solutions Collecting From Web of "Aktualisieren von Post-Meta für benutzerdefinierte Post-Typen"

Ich mag deine saubere classnstruktur sehr 🙂 Aber ich habe einen Vorschlag, der Dinge beheben könnte (basierend auf meiner Erfahrung mit Nonces und Meta-Boxen von einem Plug-in, das ich letztes Wochenende gebaut habe):

Versuchen Sie nicht, das Nonce-Feld manuell zu erstellen. Derzeit hast du:

 $nonce = wp_create_nonce( plugin_basename( __FILE__ ) ); ...  

Die Standardmethode zum Erstellen dieses Felds ist die Verwendung der wp_nonce_field() -function von WordPress. Es wird das versteckte Feld für Sie hinzufügen:

 wp_nonce_field( __FILE__, 'argus_edit_visitor' ); 

Überprüfen der Nonce

Sie überprüfen die falsche Zeichenfolge. In Ihrem Code haben Sie das Nonce mit __FILE__ aber Sie verifizieren mit der Zeichenfolge argus_edit_vistor . Du hast:

 if ( empty($_POST) OR !isset($_POST['argus_edit_visitor']) OR !wp_verify_nonce( $_POST['argus_edit_visitor'], 'argus_edit_visitor' ) ) { echo "Erm. Why?"; return $post->ID; } 

Du solltest haben:

 if ( empty($_POST) OR !isset($_POST['argus_edit_visitor']) OR !wp_verify_nonce( $_POST['argus_edit_visitor'], __FILE__ ) ) { echo "Erm. Why?"; return $post->ID; } 

Normalerweise verwende ich plugin_basename(__FILE__) wenn ich plugin_basename(__FILE__) erzeuge. Sie sollten jedoch nicht auf Probleme stoßen, solange Sie die Nonce-Erstellung und die Nonce-Verifizierung in derselben Datei durchführen.