web-dev-qa-db-ja.com

get_delete_post_linkリダイレクト

私はこれを使ってユーザーが私のサイトのフロントエンドにある自分の投稿を削除できるようにします。

<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_delete_post_link関数のリダイレクト先を変更するにはどうすればよいですか?

4
Eckstein

get_delete_post_link() を使用した後にリダイレクトするには、おそらくtrashed_postアクションにフックするのが最も簡単です。

コード:

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変数に依存させることもできます。

コード:

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 を介して関数の戻りを変更することができます。これにより、フロントエンドの投稿を削除するために、リンクをカスタムページまたはエンドポイントにポイントさせることができます。

コード:

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

カスタム投稿削除リクエストを処理できる場所から。上記のコード例では何も削除されません。間違えない限り、実際にはテストしていません。概念実証コードのみであるため、必要に応じて自分で調整する必要があります。

4
Nicolai