Programmatische Änderung der Sichtbarkeit nach der Aktion save_post gibt eine 500 zurück

Ich versuche, die Post-Sichtbarkeit für meinen benutzerdefinierten Post-Typ zu ändern. Auf dem Bildschirm edit.php kann der Benutzer ein benutzerdefiniertes Feld verwenden, um den Post-Typ auf normal oder erweitert zu setzen. Dieses Feld soll als Abstraktion für den post_status dienen. Das Ausführen des folgenden Codes in der save_post action jedoch als 500 Internal Server Error :

 add_action( 'save_post', array( $this, 'save_meta_box' ), 10, 2 ); [...] public function save_meta_box( $post_id, $post ) { [...] if( isset( $_POST['options'] ) ) { myplugin_set_options( $post_id, $_POST['options'] ); // switch post visibility switch ( $_POST['options']['type'] ) { case 'normal': wp_update_post( array( 'ID' => $post_id, 'post_status' => 'private' )); break; case 'extended': wp_update_post( array( 'ID' => $post_id, 'post_status' => 'publish' )); break; } } 

Das Ausführen dieses Codes in der load-post.php funktioniert gut. Aber ich möchte nur die Sichtbarkeit beim Speichern festlegen, nicht jedes Mal, wenn der Beitrag geöffnet wird. Irgendwelche Vorschläge, wie man das erreicht?

Danke im Voraus!

Solutions Collecting From Web of "Programmatische Änderung der Sichtbarkeit nach der Aktion save_post gibt eine 500 zurück"

Es gibt einige Informationen zu diesem Problem in der Aktionsreferenz für den Sicherungspost :

Wenn Sie eine function wie wp_update_post aufrufen, die den Hook save_post enthält, erstellt Ihre Hook-function eine Endlosschleife. Um dies zu vermeiden, haken Sie Ihre function ab, bevor Sie die function aufrufen, die Sie benötigen, und haken Sie sie anschließend erneut ab.

Also sollte so etwas funktionieren:

 [...] add_action( 'save_post', array( $this, 'save_meta_box' ), 13, 2 ); [...] public function save_meta_box( $post_id, $post ) { if ( isset( $_POST['options'] ) ) { myplugin_set_options( $post_id, $_POST['options'] ); remove_action( 'save_post', array( $this, 'save_meta_box' ), 13, 2 ); // switch post visibility switch ( $_POST['options']['type'] ) { case 'normal': wp_update_post( array( 'ID' => $post_id, 'post_status' => 'private' )); break; case 'extended': wp_update_post( array( 'ID' => $post_id, 'post_status' => 'publish' )); break; } add_action( 'save_post', array( $this, 'save_meta_box' ), 13, 2 ); } }