一种有用的快速方法是将JavaScript与输出框的Ajax操作结合使用。
创建一个小插件。在插件目录中创建一个文件夹,命名为“SubmitReviewConf”。在此文件夹中创建一个名为SubmitReviewConf.php
.
在此文件中,输入以下代码:
<?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\' );
这个小插件只包含2个函数。(编辑:评论中的OP请求后,它变为3)
第一个将自定义脚本(稍后将解释)和“thickbox”脚本(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);
});
此脚本的作用:
隐藏WordPress“Submit for Review”按钮,并将其替换为与WP按钮相同的按钮,但不会触发提交操作单击我们的假提交按钮时,我们使用Ajax URL触发函数并在模式确认中输出HTML,使用tb_show
ThickBox脚本提供的函数当用户单击模式框内的“提交审查”时,我们模拟单击WP标准的“提交审查”按钮并删除模式窗口。如果用户单击“取消”,我们只需删除模式窗口,什么也不做仅此而已。记住在WP后端激活插件;)
请注意,此插件要求在用户浏览器上启用JavaScript。如果禁用,用户将看不到任何确认,但请考虑模式窗口(ThickBox)是一个JavaScript脚本,如果禁用JavaScript,该脚本将无法工作。
如果此功能是一个关键功能,那么如果禁用了JavaScript,您可能会想禁用发布,但作为一个非关键功能,您可以忽略禁用了JavaScript的用户(在这种情况下,WordPress将负责您的安全),因为他们在用户中所占比例很小。