wake-up-neo.net

Bestätigungsfeld beim Absenden des Beitrags zur Überprüfung

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

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

enter image description here

Ich habe einige Bestätigungs-Veröffentlichungscodes im Web und Plugin-Archiv gefunden , die jedoch alle bei Publish (nicht Submit for Review ) und Eingabeaufforderungen ausgelöst werden ein Javascript-Warnfenster.

6

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 im Plugins-Verzeichnis und nennen Sie ihn "SubmitReviewConf". In diesem Ordner erstellen Sie eine PHP Datei mit dem Namen SubmitReviewConf.php.

Fügen Sie in diese Datei den folgenden Code ein:

<?php
/**
* Plugin Name: Submit for Review Confirmation Message
* Description: Confirmation Message for Submit for Review Action
* Author: G.M.
*/

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
    ?>
    <div id="confirmation_msg_out">
        <ul>
            <li><?php _e('Did you ... '); ?></li>
            <li><?php _e('Did you ... '); ?></li>
            <li><?php _e('Did you ... '); ?></li>
        </ul>
        <input id="confirmation_msg_submit" class="button button-primary button-large" value="<?php _e('Submit for Review') ?>" name="submitforreview"></input>
        <a id="confirmation_msg_submit_cancel" class="button button-large" href="#"><?php _e('Cancel') ?></a>
    </div>
    <?php
    die();
}
add_action( 'wp_ajax_output_review_confirm', 'confirmation_msg_out' );

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

Der erste Befehl reiht ein benutzerdefiniertes Skript (was später erklärt wird) und das Skript "Thickbox" (das Skript, mit dem WordPress modale Nachrichten anzeigt) in die Warteschlange ein.

Diese Skripte werden nur in die Warteschlange gestellt, wenn der aktuelle Benutzer veröffentlichte Beiträge nicht bearbeiten kann, sodass Autoren und höhere Benutzer Beiträge ohne Bestätigungsmeldung veröffentlichen können.

Die zweite Funktion gibt den HTML-Code für das Bestätigungsfeld aus. Diese Funktion ist in die Ajax-Aktion output_review_confirm eingebunden.

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

In diese Datei setzen:

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 = '<input id="confirm-publish-button" class="button button-primary button-large" type="button" value="' + 
        $publish.val() + '"></input>';
    $publish.hide().after(newbutton);

});

Was dieses Skript macht:

  1. Blendet die WordPress-Schaltfläche "Zur Überprüfung einreichen" aus und ersetzt sie durch eine Schaltfläche, die der Schaltfläche WP entspricht, die jedoch keine Einreichungsaktion auslöst.
  2. Wenn Sie auf die Schaltfläche fake submit klicken, verwenden Sie die Ajax-URL, um unsere Funktion auszulösen und den HTML-Code in der modalen Bestätigung mit der Funktion tb_show auszugeben, die vom ThickBox-Skript bereitgestellt wird.
  3. Wenn der Benutzer im modalen Feld auf "Zur Überprüfung einreichen" klickt, simulieren wir einen Klick auf die Standardschaltfläche "Zur Überprüfung einreichen" WP und entfernen das modale Fenster. Wenn der Benutzer auf "Abbrechen" klickt, wird das modale Fenster einfach entfernt, ohne etwas zu tun.

Das ist alles. Vergiss nicht das Plugin im WP Backend zu aktivieren;)

Beachten Sie, dass für dieses Plugin JavaScript im Benutzerbrowser aktiviert sein muss. Wenn deaktiviert, wird dem Benutzer keine Bestätigung angezeigt. Beachten Sie jedoch, dass es sich bei dem modalen Fenster (ThickBox) um ein JavaScript-Skript handelt, das nicht funktioniert, wenn JavaScript deaktiviert ist.

Wenn diese Funktion kritisch war, möchten Sie wahrscheinlich die Veröffentlichung deaktivieren, wenn JavaScript deaktiviert ist. Da diese Funktion jedoch nicht kritisch ist, können Sie Benutzer, für die JavaScript deaktiviert ist, einfach ignorieren (in diesem Fall kümmert sich WordPress um Ihre Sicherheit) ), wenn man bedenkt, dass sie nur einen sehr geringen Prozentsatz der Nutzer ausmachen.

11
gmazzap

Das ist möglich. Sie müssen den Filter-Hook wp_insert_post_data verwenden. Ich werde Ihnen die allgemeine Idee geben, hoffentlich hilft dies.

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 );
0
Greeso