自定义帖子预览,不保存

时间:2015-06-18 作者:And Finally

我已经将JS添加到我的响应主题中,它将编辑后页面上的预览按钮更改为指向非现场页面的链接。该页面包含一个320px x 568px的iframe,它在移动布局中显示帖子,非常类似于this site. 我在链接的href中传递帖子的URL作为参数,页面使用该URL作为iframe的src。

我们的内容专员指出,默认的预览按钮可以预览帖子的更改,即使没有保存。有人能建议我如何使用我的移动预览页面复制这种行为吗?比如,有没有办法修改预览按钮,将正常的预览URL发送到我的移动预览页面?

我找到了click.post-preview wp admin/js/post中的处理程序。min.js,用于处理对预览按钮的单击。似乎要提交#post表单。我还发现submit.autosave-local wp中的处理程序包括/js/autosave。min.js,它似乎是预览时激发的。但我很难弄清楚这一切是如何结合在一起的。

1 个回复
SO网友:And Finally

我找到了一个很好的方法preview_post_link 过滤器,允许您重写预览操作使用的URL。就我而言,我做了如下事情:

add_filter( \'preview_post_link\', function ( $link ) {
    return \'http://domain.com/mobile-preview/?src=\' . urlencode($link) . \'%26admin_bar=false\';
} );
当我单击预览按钮时,WordPress会打开我的自定义URL。简单,无需JavaScript-WordPress再次辉煌!

如果有人需要使用JS,您可以尝试以下方法:

(function ($) {

    $(document).ready(function () {

        // Create URL for post preview
        var previewUrl = $(\'#preview-action\').find(\'.preview\').attr(\'href\');
        var parser = document.createElement(\'a\');
        parser.href = previewUrl;
        var postId = $(\'#post_ID\').val();
        mobilePreviewUrl = parser.protocol + \'//\' + parser.host + \'?p=\' + postId;

        var href = mobilePreviewUrl ? \'http://domain.com/mobile-preview/?src=\' + encodeURIComponent(mobilePreviewUrl) + \'%26preview=true\' : \'\';

        // Preview buttons
        var mobilePreviewBtn = $(\'<a/>\').addClass(\'preview button\').attr({
            \'id\'    : \'mobile-preview\',
            \'href\'  : href,
            \'target\': \'_new\'
        }).text(\'Preview Mobile\');
        $(\'#preview-action\').prepend(mobilePreviewBtn);
        $(\'#post-preview\').hide();
        mobilePreviewBtn.on(\'click\', function(e){
            e.preventDefault();
            $(window).off( \'beforeunload.edit-post\' );
            wp.autosave.server.tempBlockSave();
            $(\'form#post\').submit();
            window.open(href, \'mobilePreview\');
        });

    }); // end document ready

})(jQuery);
这将从默认预览按钮的href 属性,并将其用作新自定义移动预览按钮的href。我的移动预览页面是在异地托管的-当用户单击自定义预览按钮时,我们将通过一个名为src. 预览页面在移动大小的iframe中显示URL。

自定义预览按钮的单击处理程序关闭beforeunload.edit-post 事件处理程序停止默认“是否确实要离开此页?”确认在提交后期编辑表单时弹出。下一行调用WordPress在单击预览按钮时通常使用的autosave JS方法。这会将草稿当前保存在帖子编辑器中。下一行提交保存在编辑器中的帖子,最后一行打开一个带有自定义预览URL的新窗口。

结束