私はこれを使ってユーザーが私のサイトのフロントエンドにある自分の投稿を削除できるようにします。
<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関数のリダイレクト先を変更するにはどうすればよいですか?
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}" );
}
カスタム投稿削除リクエストを処理できる場所から。上記のコード例では何も削除されません。間違えない限り、実際にはテストしていません。概念実証コードのみであるため、必要に応じて自分で調整する必要があります。