当任何人在CPT中从块编辑器中按Publish或Update时,我希望他们被重定向到CPT列表页面。(用户通常一次编辑多个CPT,因此这将为他们节省一个步骤,并防止他们多次按Update,因为他们不确定自己的编辑是否已保存。)
我试过两种不同的钩子:
来自2013 question, redirect_post_location
:
add_filter( \'redirect_post_location\', \'wpse_124132_redirect_post_location\' );
function wpse_124132_redirect_post_location( $location ) {
if ( isset( $_POST[\'save\'] ) || isset( $_POST[\'publish\'] ) )
return admin_url( \'edit.php?post_type=mycptslug\' );
return $location;
}
(我想知道这是否只会影响核心帖子,因为钩子的名字中有“post”?它几乎没有文档记录。无论它是从2013年起更改的,还是不适用于新编辑器,它都没有重定向。)
根据我对save_post
挂钩:
add_action( \'save_post\', \'wpse_redirect_to_dashboard\', 40, 3 );
function wpse_redirect_to_dashboard( $post_id, $post, $update ) {
global $_POST;
// Since save_post runs 4 times, make sure this is the final run
if( count( $_POST ) > 0 && true === $update && \'mycptslug\' === $post->post_type ) {
wp_redirect( admin_url( \'edit.php?post_type=mycptslug\' ) ); exit;
}
}
(我已确认
if
条件按预期工作-我临时将一条成功消息记录到文本文件中,并且每次在编辑器中按Update时都会成功一次-但它不会重定向。还尝试重定向到其他URL,以防
admin_url()
部件不工作,但仍然没有重定向。)
不幸的是,这两种方法都不适用于块编辑器。更新后,用户仍保留在编辑器中。是否有其他方法,例如在CPT注册或其他挂钩期间,在用户进行编辑后,成功地将其发送给他们?
根据cjbj的回答,我有这个更新的代码,但它仍然没有重定向。我不太清楚延迟加载意味着什么,也不知道如何确保在ajax保存调用后触发。(这适用于任何职位类型):
function wpse_redirect_to_post_list() {
?>
<script>
// Get post type from hidden input
let postType=document.querySelector(\'form.metabox-base-form input#post_type\').value;
// On "publish / update / submit changes" button click, redirect to cpt listing
jQuery( document ).ready( function( $ ) {
var url = \'/wp-admin/edit.php?post_type=\' + postType;
$( \'.editor-post-publish-button__button\' ).click( function() {
window.location.href = url;
});
});
</script>
<?php
}
add_action( \'admin_print_footer_scripts\', \'wpse_redirect_to_post_list\' );