“Sofort veröffentlichen” mit benutzerdefiniertem Post-Status

Ich habe einen benutzerdefinierten Poststatus ‘Bearbeiten’ registriert. Wenn ein Beitrag geändert wird, um diesen Status zu verwenden, wird die Veröffentlichungszeit auf den Zeitpunkt gesetzt, zu dem der Status geändert wurde, anstatt auf “Sofort”.

Das ist frustrierend, weil meine Redakteure das oft nicht bemerken und Posts 2 Tage in der Vergangenheit veröffentlichen.

Hier ist der Code:

// Register Custom Post Status function custom_post_status() { $args = array( 'label' => _x( 'Editing', 'Status General Name', 'futurism' ), 'label_count' => _n_noop( 'Editing (%s)', 'Editing (%s)', 'futurism' ), 'public' => false, 'internal' => true, 'private' => true, 'protected' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'exclude_from_search' => true, ); register_post_status( 'editing', $args ); } add_action( 'init', 'custom_post_status' ); // Add the option to the select menu in wp-admin because WordPress doesn't do this for you function append_post_status_list(){ global $post; $complete = ''; $label = ''; if($post->post_status == 'editing'){ $complete = ' selected=\"selected\"'; $label = ' Editing'; } echo '  jQuery(document).ready(function($){ $("select#post_status").append("Editing"); $(".misc-pub-section label").append("'.$label.'"); });  '; } add_action('admin_footer-post.php', 'append_post_status_list'); 

Solutions Collecting From Web of "“Sofort veröffentlichen” mit benutzerdefiniertem Post-Status"

Wenige Notizen

  • Wir können die post_submit_meta_box(() “Sofort veröffentlichen” innerhalb der post_submit_meta_box(() post_date_gmt wenn post_date_gmt gleich '0000-00-00 00:00:00' .

  • Wir können hier innerhalb von wp_update_post() und hier und hier innerhalb von wp_insert_post() , wie Draft- , Pending- oder Auto-Draft- Beiträge nicht mit Datum versehen sind.

  • Es sieht so aus, als ob wir hier und hier einen Filter für das Post-Status-Array hätten, den wir leicht für den benutzerdefinierten editing reparieren könnten. Ich frage mich auch, ob es sinnvoll wäre, dies aus dem register_post_status() Setup zu steuern?

  • Es sollte möglich sein, die post_date_gmt im wp_insert_post_data Filter zu ändern. Hier könnten wir versuchen, den vorherigen Post-Status von den $postarr Feldern hidden_post_status oder hidden_post_status $postarr .

  • Der praktische transition_post_status Hook wird wp_insert_post_data , bevor der Post aktualisiert wird, jedoch vor dem wp_insert_post_data Filter. Es wird daher nicht funktionieren, den entsprechenden databasewert in diesem Stadium anzupassen, da er nur kurz danach überschrieben wird.

  • Der Hook post_updated , nachdem der Post aktualisiert wurde. Dieser Hook bietet eine einfache Möglichkeit, das Post-Objekt vor und nach dem Update zu vergleichen.

Beispiel

Hier ist ein Beispiel, wie wir in post_updated , um post_date_gmt für den Post zu löschen, wenn der neue Status bearbeitet wird und der vorherige weder veröffentlicht noch bearbeitet wird :

 add_action( 'post_updated', function( $post_ID, $post_after, $post_before ) use ( &$wpdb ) { if( 'editing' === $post_after->post_status && ! in_array( $post_before->post_status, [ 'editing', 'publish' ] ) && 'post' === $post_after->post_type ) $wpdb->update( $wpdb->posts, [ 'post_date_gmt' => '0000-00-00 00:00:00' ], [ 'ID' => $post_ID ] ); }, 10, 3 ); 

Hoffentlich können Sie das weiter testen und an Ihre Bedürfnisse anpassen.