get_delete_post_link redirect

时间:2014-02-02 作者:Eckstein

我使用它来允许用户删除自己在我的网站前端的帖子:

<a onclick="return confirm(\'Move this post to the trash? You can restore it later.\');" href="<?php echo get_delete_post_link($postid); ?>">Trash Post</a>
问题是,这刷新了当前页面,并向URL添加了一些查询参数(trashed=1,ids=123)。我想让用户重定向到具有特定查询参数的特定页面,如下所示:

mysite.com/yourarticles/?user=123&post=321&action=trash
如何更改get\\u delete\\u post\\u link函数重定向到的位置?

1 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

使用后重定向get_delete_post_link() 这可能是最简单的trashed_post 措施:

Code:

add_action( \'trashed_post\', \'wpse132196_redirect_after_trashing\', 10 );
function wpse132196_redirect_after_trashing() {
    wp_redirect( home_url(\'/your-custom-slug\') );
    exit;
}
或者你可以根据$_GET 通过挂接到操作parse_request:

Code:

add_action( \'parse_request\', \'wpse132196_redirect_after_trashing_get\' );
function wpse132196_redirect_after_trashing_get() {
    if ( array_key_exists( \'trashed\', $_GET ) && $_GET[\'trashed\'] == \'1\' ) {
        wp_redirect( home_url(\'/your-custom-slug\') );
        exit;
    }
}
请注意,这两种解决方案也将在管理端进行拦截,因此您可能需要添加一个检查来防止这种情况发生。

更改返回的链接get_delete_post_link() 查看源代码,在link-template.php. 您将看到$delete_link 已构造。您可以通过相应的过滤器更改函数的返回get_delete_post_link. 通过这种方式,您可以将链接指向自定义页面或端点,以便前端post删除。

Code:

add_filter( \'get_delete_post_link\', \'wpse132196_change_delete_post_link\', 10, 3 );
function wpse132196_change_delete_post_link(  $id = 0, $deprecated = \'\', $force_delete = false ) {
    global $post;
    $action = ( $force_delete || !EMPTY_TRASH_DAYS ) ? \'delete\' : \'trash\';
    $qargs = array(
        \'action\' => $action,
        \'post\' => $post->ID,
        \'user\' => get_current_user_id()
    );
    $delete_link = add_query_arg( $qargs, home_url( sprintf( \'/yourarcticles/\' ) ) );
    return  wp_nonce_url( $delete_link, "$action-post_{$post->ID}" );
}
您可以处理自定义的删除后请求。请注意,上面的示例性代码不会删除任何内容,如果我没有弄错的话,我还没有实际测试它,它只是概念验证代码,所以您必须自己适应您的需要。

结束

相关推荐

Front-End Post Submission

我正在尝试添加一个表单,用户可以从前端提交帖子。我正在学习本教程:http://wpshout。com/wordpress从前端提交帖子/我正在做的是添加this code 到我的一个页面模板。表单显示正常,但当我单击“提交”按钮时,它会显示“Page not found error“”许多评论者说这不起作用。谁能给我指出正确的方向吗?代码是否不完整?有缺陷吗?我做错什么了吗?谢谢Towfiq I。