Bestätigungsfeld beim Senden der Post zur Überprüfung

Ein sehr häufiges Problem, das ich bei neuen Autoren erfahre, ist, dass sie vergessen, einige wichtige Aufgaben zu erledigen, bevor sie ihren Beitrag zur Überprüfung einreichen (obwohl ich einen Leitfaden für sie habe).

Ist es möglich, ein Bestätigungsfeld hinzuzufügen, das nur angezeigt wird, wenn ein Mitarbeiter auf die Schaltfläche “Zur Überprüfung einreichen” klickt? Möglicherweise eine jQuery-Box wie folgt:

Bildbeschreibung hier eingeben

Ich habe einige Veröffentlichungscodes im Web- und Plugin-Archiv gefunden, die aber alle auf Publish (nicht zur Überprüfung einreichen ) auslösen und ein Javascript-Warnfenster anzeigen.

Solutions Collecting From Web of "Bestätigungsfeld beim Senden der Post zur Überprüfung"

Ein nützlicher schneller Weg ist die Verwendung von JavaScript in Kombination mit einer Ajax-Aktion, die die Box ausgibt.

Erstelle ein kleines Plugin. Erstellen Sie einen Ordner innerhalb des Plugins-Verzeichnisses mit dem Namen ‘SubmitReviewConf’. Erstellen Sie in diesem Ordner eine PHP-Datei namens SubmitReviewConf.php .

Platziere diesen Code in dieser Datei:

 < ?php /** * Plugin Name: Submit for Review Confirmation Message * Description: Confirmation Message for Submit for Review Action * Author: GM */ function add_my_admin_assets( $hook ) { // Only once variable force the box to be shown only one time. Can be from theme or plugin via filter. // Default is true $only_once = apply_filters( 'submit_review_conf_onlyonce', 1 ); // if ( $only_once && $hook == 'post.php' ) $post = get_post( $_GET['post'] ); $enqueue = $only_once ? ($hook == 'post-new.php' || ( $hook == 'post.php' && $post->post_status != 'pending') ) : ($hook == 'post-new.php' || $hook == 'post.php'); if ( isset($post) && get_post_meta( $post->ID, '_skip_SubmitReviewConf', true ) ) return; $postid = ''; if ( isset($_GET['post']) && is_object($post) ) $postid = $post->ID; if ( $enqueue && ! current_user_can( 'edit_published_posts' ) ) { wp_enqueue_style( 'thickbox' ); wp_enqueue_script( 'SubmitReviewConf', plugins_url( 'SubmitReviewConf.js', __FILE__ ), array( 'jquery','thickbox' ), null ); wp_localize_script( 'SubmitReviewConf', 'SubmitReviewConfData', array( 'only_once' => $only_once, 'postid' => $postid ) ); } } add_action( 'admin_enqueue_scripts', 'add_my_admin_assets', 30 ); function clean_up_SubmitReviewConf_meta( $post ) { delete_post_meta( $post->ID, '_skip_SubmitReviewConf' ); } add_action( 'pending_to_publish', 'clean_up_SubmitReviewConf_meta', 30 ); function confirmation_msg_out() { if ( isset( $_GET['only_once'] ) && isset( $_GET['postid'] ) ) update_post_meta( $_GET['postid'], '_skip_SubmitReviewConf', '1' ); // SET HTML FOR THE CONFIRMATION MESSAGE IN THIS FUNCTION ?> 
  • < ?php _e('Did you ... '); ?>
  • < ?php _e('Did you ... '); ?>
  • < ?php _e('Did you ... '); ?>
< ?php _e('Cancel') ?>
< ?php die(); } add_action( 'wp_ajax_output_review_confirm', 'confirmation_msg_out' );

Dieses kleine Plugin enthält nur 2 functionen. (Bearbeiten: nach einer OP-Anfrage in Kommentaren wurde es 3)

Das erste fügt ein benutzerdefiniertes Skript (was später erklärt wird) und das "Thickbox" -Skript (das Skript, mit dem WordPress modale Nachrichten anzeigt) in die Warteschlange ein.

Diese Skripts werden nur in die Warteschlange eingereiht, wenn der aktuelle Benutzer veröffentlichte Posts nicht bearbeiten kann, sodass Autoren und höhere Benutzer Posts ohne Bestätigungsnachricht veröffentlichen können.

Die zweite function gibt den HTML-Code für die Bestätigungsbox aus. Diese function wird in eine Ajax-Aktion, output_review_confirm , output_review_confirm .

Jetzt im selben Ordner von PHP-Dateien erstellen wir unsere JavaScript-Datei und nennen sie SubmitReviewConf.js .

In dieser Datei put:

 jQuery().ready( function($) { var $publish = $('#publish'); var only_once = SubmitReviewConfData.only_once; function remove_confirm_publish_button() { $('#confirm-publish-button').remove(); $publish.show(); } $(document).on('click', '#confirm-publish-button', function(e) { e.preventDefault(); if ( only_once ) remove_confirm_publish_button(); var tb_show_url = ajaxurl + '?action=output_review_confirm'; if (only_once) tb_show_url += "&only_once=1"; if ( SubmitReviewConfData.postid != '' ) tb_show_url += "&postid=" + SubmitReviewConfData.postid; tb_show('', tb_show_url); }); $(document).on('click', '#confirmation_msg_submit', function(e) { e.preventDefault(); tb_remove(); $publish.click(); }); $(document).on('click', '#confirmation_msg_submit_cancel', function(e) { e.preventDefault(); tb_remove(); }); var newbutton = ''; $publish.hide().after(newbutton); }); 

Was dieses Skript macht:

  1. Versteckt die WordPress-Schaltfläche "Zur Überprüfung einreichen" und ersetzt sie durch eine Schaltfläche, die der WP-Datei entspricht, aber die Übermittlungsaktion nicht austriggers.
  2. Wenn Sie auf die Schaltfläche " tb_show geklickt haben, verwenden wir die Ajax-URL, um unsere function auszulösen und den HTML- tb_show innerhalb der modalen Bestätigung tb_show , indem Sie die function tb_show des ThickBox-Skripts verwenden.
  3. Wenn der Benutzer auf "Zur Überprüfung absenden" im modalen Feld klickt, simulieren wir einen Klick auf den WP-Standard "Für Überprüfung senden" und entfernen das modale Fenster. Wenn der Benutzer auf 'Abbrechen' klickt, entfernen wir einfach das modale Fenster und tun nichts.

Das ist alles. Denken Sie daran, das Plugin im WP-Backend zu aktivieren;)

Beachten Sie, dass dieses Plugin erfordert, dass JavaScript im Benutzerbrowser aktiviert wird. Wenn deaktiviert, wird dem Benutzer keine Bestätigung angezeigt, aber bedenken Sie, dass das modale Fenster (ThickBox) ein JavaScript-Skript ist, das nicht funktionieren kann, wenn JavaScript deaktiviert ist.

Wenn diese function von kritischer Bedeutung ist, möchten Sie wahrscheinlich die Veröffentlichung deaktivieren, wenn JavaScript deaktiviert ist. Da es sich jedoch um eine nicht kritische function handelt, können Sie Benutzer mit deaktiviertem JavaScript ignorieren (in diesem Fall kümmert sich WordPress um Ihre Sicherheit) ) unter Berücksichtigung der Tatsache, dass es sich um einen sehr kleinen Prozentsatz von Nutzern handelt.

Es ist möglich, dies zu tun. Sie müssen den Filter Hook wp_insert_post_data . Ich werde dir die allgemeine Idee geben, hoffentlich hilft das.

Ein Beispiel wäre:

 function my_filter_handler($data , $postarr) { // do something with the post data // You have to check that your post is submitted for review, not the publish post, so you have to have an if statement checking that // Then, you have to ensure that you use jQuery that comes with WordPress (using enqueue methods), and not a jQuery you supply. return $data; } add_filter('wp_insert_post_data', 'my_filter_handler', '99', 2 );