Поле подтверждения при отправке сообщения для проверки

Очень распространенная проблема, с которой я сталкиваюсь с новыми авторами, заключается в том, что они забывают выполнить несколько важных задач перед отправкой своего сообщения для обзора (хотя у меня есть руководство для них).

Можно ли добавить окно подтверждения, которое появляется только в том случае, если вкладчик нажимает кнопку «Отправить для просмотра»? Потенциально окно jQuery:

введите описание изображения здесь

Я столкнулся с некоторыми из них, чтобы подтвердить коды публикации в Интернете и в архивах плагинов, но все из них инициируют публикацию (не отправляют для просмотра ) и вызывают окно предупреждения Javascript.

Полезным быстрым способом является использование JavaScript в сочетании с действием Ajax, которое выводит окно.

Создайте небольшой плагин. Создайте папку внутри каталога плагинов, называя ее «SubmitReviewConf». В этой папке создайте файл PHP с именем SubmitReviewConf.php .

В этом файле введите этот код:

 <?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 ?> <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' ); 

Этот небольшой плагин содержит только 2 функции. (Изменить: после запроса OP в комментариях стало 3)

Первый вставляет собственный скрипт (что объясняется позже) и сценарий «толстый колокол» (сценарий WordPress использует для отображения модальных сообщений).

Эти скрипты находятся в очереди только в том случае, если текущий пользователь не может редактировать опубликованные сообщения, поэтому авторы и более высокие пользователи могут публиковать сообщения без подтверждения.

Вторая функция выводит HTML для окна подтверждения. Эта функция подключена к действию Ajax, output_review_confirm .

Теперь в той же папке файлов PHP давайте создадим наш файл JavaScript и назовите его SubmitReviewConf.js .

В этом файле поставьте:

 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); }); 

Что делает этот скрипт:

  1. Скрывает кнопку «Отправить для просмотра» WordPress и заменяет ее кнопкой, которая соответствует WP, но это не вызывает действие отправки.
  2. Когда нажата кнопка поддельной отправки, мы используем URL-адрес Ajax для запуска нашей функции и вывода HTML внутри модального подтверждения, используя функцию tb_show предоставляемую скриптом ThickBox.
  3. Когда пользователь нажимает кнопку «Отправить для просмотра» внутри модального окна, мы моделируем щелчок по стандарту WP «Отправить для обзора» и удаляем модальное окно. Если пользователь нажимает «Отмена», мы просто удаляем модальное окно, ничего не делая.

Это все. Не забудьте активировать плагин в WP backend;)

Обратите внимание: этот плагин требует, чтобы JavaScript был включен в браузере пользователя. Если отключено, пользователь не увидит подтверждения, но учтите, что модальное окно (ThickBox) является скриптом JavaScript, который не может работать, если JavaScript отключен.

Если эта функция была критической, вы, вероятно, захотите отключить публикацию, если JavaScript отключен, но, будучи некритической функцией, вы можете просто игнорировать пользователей, у которых отключен JavaScript (WordPress позаботится о вашей безопасности, в этом случае ), учитывая, что они составляют очень небольшой процент пользователей.

Это можно сделать. Вы должны использовать wp_insert_post_data фильтра wp_insert_post_data . Я дам вам общую идею, надеюсь, это поможет.

Примером может служить:

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