get_delete_post_link redirect

I am using this to allow users to delete their own posts on the front end of my site:

<a onclick="return confirm('Move this post to the trash? You can restore it later.');" href="<?php echo get_delete_post_link($postid); ?>" rel="nofollow noreferrer noopener">Trash Post</a>

The problem is, this refreshed the current page and adds some query args to the URL (trashed=1 and ids=123). What I want to happen is that the user is redirected to a certain page with specific query args, like so:

How can I change where the get_delete_post_link function redirects to?


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

To redirect after the use of get_delete_post_link() it’s probably easiest to hook into the trashed_post action:


add_action( 'trashed_post', 'wpse132196_redirect_after_trashing', 10 );
function wpse132196_redirect_after_trashing() {
    wp_redirect( home_url('/your-custom-slug') );

Or you could make it dependent on the according $_GET variable by hooking into the the action parse_request:


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') );

Note that both solution will intercept on the admin side too, so you might want to add a check to prevent that.

To change the link returned by get_delete_post_link() take a look at the source, in link-template.php. There you’ll see how the $delete_link is constructed. You can alter the return of the function via the correspondent filter get_delete_post_link. This way you can make the link point to your custom page or endpoint for frontend post deletion.


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}" );

From where you can take care of handling your custom post deletion request. Note that above exemplary code won’t delete anything, if I’m not mistaken, I haven’t actually tested it, it’s only proof of concept code, so you have to adapt to your needs yourself.

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of
Inline Feedbacks
View all comments