重定向至在块编辑器中发布后更新或发布后的所有帖子

时间:2020-07-23 作者:WebElaine

当任何人在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\' );

1 个回复
SO网友:cjbj

据我所知redirect_post, 其中redirect_post_location 过滤器驻留在任何位置,不会自动调用,因此不会触发过滤器。这个save_post 挂钩(或优选save_post_post_type) 仍然有效,但不适用于代谢箱,因为古腾堡将其单独保存using ajax calls. Ajax调用在后台运行,不会影响当前页面。因此,重定向不起作用。

因此,您无法通过调用服务器可靠地重定向。但是,您可以通过将额外的jquery操作绑定到保存按钮来在用户端重定向。类似这样:

jQuery( document ).ready( function( $ ) {
    var url = \'your_url/edit.php?post_type=mycptslug\';
    $( \'.editor-post-publish-button__button\' ).on( \'click\',
        function() {
            window.location.href = url;
            });
        }
    );
});
注意:没有测试jquery,因此可能有问题,但您已经了解了情况。通过延迟加载,确保在ajax保存调用之后执行此操作。

相关推荐

Changing auth_redirect() page

我知道auth_redirect() 检查用户是否已登录,如果未登录,则将其重定向到登录页面,然后在成功后返回上一页。我需要我的网站上的功能,我有。例如,我希望其中一个页面只能由登录的用户访问,如果他们试图访问该页面,则需要先登录,然后成功返回该页面。我的电脑上有以下代码function.php.if ( is_page(\'user_only\') && ! is_user_logged_in() ) { auth_redirect(); } 问题是我有