JKit: 部分禁用日志编辑自动保存

  在Wordpress中,日志版本管理(Post Revisions)和编辑日志时的自动保存都会在数据库中产生新的数据(编辑已发布的内容时),很显然这些数据的用处只是一时的,但却给今后数据库查询增加了无谓的额外开销。

  对于日志版本管理,我们在wp-config.php中添加一句define('WP_POST_REVISIONS', false); 即可以轻松的完全禁用此功能,但自动保存就没有这么简单,官方没有提供开关功能,现在网上找到的方法似乎都是通过屏蔽javascript脚本,这种方法虽然可行,但在某些浏览器下可能报错,同时换个角度来看,某些时候自动保存还是有些用处的,完全禁用似乎也不太可取。

  下面的代码实现了仅在编辑草稿、发表新日志或页面时启用自动保存,在重新编辑已发表的内容时则不会进行自动保存的操作,避免在数据库中产生无用的数据,方法则是在浏览器提交申请,服务器进行自动保存之前对日志的状态进行判断,如果是草稿或未找到日志ID(即新日志)则进行保存操作,否则直接退出。

<?php
/**
 * 仅在编辑草稿、发表新日志或页面时启用自动保存。
 * 防止编辑已发表日志页面自动保存时在数据库中产生新的数据
 * 
 * @version 0.1
 * @author JinnLynn
 */
function JKit_RemoveAutosave() {
    if (!defined('DOING_AJAX') || $_POST['action'] != 'autosave')
        return;
    $post_id = isset($_POST['post_ID']) ? (int) $_POST['post_ID'] : 0;
    if (!$post_id)
        return;
    $post = get_post($post_id);
    if ($post->post_status == 'draft')
        return;
    $message = __('Autosave is disabled.&nbsp;&nbsp;');
    $res = new WP_Ajax_Response(array( 'what' => 'autosave',
                                       'id'   => $post->ID,
                                       'data' => $message )
                               );
    $res->send();
    exit();
}
add_action('init', 'JKit_RemoveAutosave');
?>

NOTE: 同样的,你可以使用JKit Builder生成带此功能的插件。