最近给客户进行主题开发的时候,由于客户前台和后台采用不同的域名,后台使用的是直接解析到当前网站的正常域名,前台采用的是解析到其他网站上的域名,然后加了一个后缀并进行了重定向,这就导致了一个问题,就是在后台预览文章的时候出现404错误,因为从后台点击预览文章,打开的是前端的域名加文章id及参数,比如文章如果是草稿状态的情况,那么使用前台地址是无法正常预览访问的,所以就需要修改后台预览文章的链接为以后台域名为前缀的。
首先,我们使用过滤钩子preview_post_link来自定义预览链接,你可以把下面的代码放到您的functions.PHP文件中
function xm_custom_preview_link() {
return get_option('siteurl') . "/?p=" . get_the_ID() . "?preview=true";
}
add_filter('preview_post_link','xm_custom_preview_link');
如果你使用的都是经典编辑器,那么就这一步就可以了,但是如果你使用的是古腾堡编辑器,那么光这一步还不行,他改变不了编辑页面的预览链接,只能改变后台列表中的预览链接,我们还需要把下面的代码也放到您的functions.PHP中
function fix_preview_link_on_draft() {
$preview_link = get_option('siteurl') . "/?p=" . get_the_ID() . "?preview=true";
echo '<script type="text/javascript">
jQuery(document).ready(function () {
const checkPreviewInterval = setInterval(checkPreview,1000);
function checkPreview() {
const editorPreviewButton = jQuery(".edit-post-header-preview__button-external");
if (editorPreviewButton.length && editorPreviewButton.attr("href") !== "' . $preview_link . '" ) {
editorPreviewButton.attr("href","' . $preview_link . '");
editorPreviewButton.off();
editorPreviewButton.click(false);
editorPreviewButton.on("click",function(e) {
const intervalId = setInterval(function() {
// find out when the post is saved
clearInterval(intervalId);
const win = window.open("' . $preview_link . '","_blank");
if (win) {
win.focus();
}
},50);
});
}
}
});
</script>';
}
add_action( 'admin_footer-edit.PHP','fix_preview_link_on_draft' ); // Fired on the page with the posts table
add_action( 'admin_footer-post.PHP','fix_preview_link_on_draft' ); // Fired on post edit page
add_action( 'admin_footer-post-new.PHP','fix_preview_link_on_draft' ); // Fired on add new post page