与操作DELETED_POST和IS_ADMIN()的‘Conflicts’

时间:2016-04-04 作者:Antonio

我在前端为博客帖子和自定义类型的帖子创建了一个删除按钮,删除后我会重定向到一个特定页面,我在google上四处查看,发现了所有类似的解决方案:

add_action(\'deleted_post\', \'my_trashed_post_handler\', 10);
function my_trashed_post_handler($post_id) {
        wp_redirect( get_option(\'siteurl\') );
        exit;
}
代码运行良好,但我不想更改后端的标准行为,所以我这样做了:

add_action(\'deleted_post\', \'woffice_trashed_post_handler\', 10);
function woffice_trashed_post_handler($post_id) {
    if(!is_admin()) {
        wp_redirect( get_option(\'siteurl\') );
        exit;
    }
}
这段代码不起作用,因为我发现如果我在前端删除一篇文章,那么返回值总是true。

要通过前端创建删除链接,我使用此功能:

get_delete_post_link(get_the_ID();
在我仅仅通过前端或特定链接/按钮删除帖子后,如何解决问题并重定向到特定页面?

UPDATE: 感谢zlatev回复,我能够触发它并避免is\\U管理问题,现在我又遇到了另一个非常奇怪的问题:

我创建了一篇新文章,打开它,然后单击fronend删除,我被重定向到博客列表页面(我的自定义edirect url)

  • 该文章没有被删除,我希望该文章再次被删除,我再次单击frontend删除,我被重定向到同一页面。该文章在第二次被删除,我测试了很多次,总是在第二次被删除一次,我用这个创建了删除url,并且url始终是相同的:

    add_query_arg( \'origin\', \'fe-blog\', get_delete_post_link(get_the_ID(), \'\', true))
    
    我用于rdirect的代码如下:

    add_action(\'deleted_post\', \'woffice_trashed_post_handler\');
    function woffice_trashed_post_handler() {
        if( isset( $_GET[\'origin\'] ) && ($_GET[\'origin\'] == \'fe-blog\' || $_GET[\'origin\'] == \'fe-wiki\' || $_GET[\'origin\'] == \'fe-project\') ) {
            switch($_GET[\'origin\']){
                case \'fe-blog\':
                    $blog_page = get_option( \'page_for_posts\' );
                    if(empty($blog_page)){
                        $pages = get_pages(array(
                            \'meta_key\' => \'_wp_page_template\',
                            \'meta_value\' => \'page-templates/blog.php\'
                        ));
                        $blog_page = $pages[0]->ID;
                    }
                    //var_dump(get_permalink($blog_page));
                    //die();
                    wp_redirect( get_permalink($blog_page) );
                    break;
            }
            exit();
        }
    }
    
    我用错钩子了?

  • 1 个回复
    SO网友:Z. Zlatev

    更重要的是,您应该注意什么链接是由get_delete_post_link(). 这是一个管理链接is_admin() 支票将始终true. 相反,您需要其他有助于满足请求的东西。尝试向删除链接添加并查询参数。

    add_query_arg( \'origin\', \'fe\', get_delete_post_link( get_the_ID() ) );
    
    然后在行动中

    add_action(\'deleted_post\', \'woffice_trashed_post_handler\', 10);
    function woffice_trashed_post_handler($post_id) {
        if( isset( $_POST[\'origin\'] ) && $_POST[\'origin\'] == \'fe\' ) {
            wp_redirect( get_option(\'siteurl\') );
            exit;
        }
    }
    

    相关推荐

    WP_COMMENTS表真的很大,正在慢慢加载/wp-admin/dit-Comments.php

    我们的wp\\u注释有数百万行。当我们加载时/wp/wp-admin/edit-comments.php 它将超时。看看mysql,这个简单的查询需要很长时间SELECT wp_comments.comment_ID FROM wp_comments WHERE ( ( comment_approved = \'0\' OR comment_approved = \'1\' ) ) AND comment_type IN (\'pingback\', \'trackback\')&