
get_delete_post_link()とは?
get_delete_post_link()
は
投稿・固定ページ・カスタム投稿をゴミ箱に移動する削除用リンク(URL)を取得する関数
です。
管理者や編集者など権限を持ったユーザーが、ワンクリックで投稿を削除する処理を実装するときに使います。
この関数はHTMLリンクは出力せず、削除用のURLだけを文字列で返します。
そのため、自分で<a>
タグやボタンを作る必要があります。
get_delete_post_link()の基本的な書式
get_delete_post_link(
int|WP_Post $id = 0,
string $deprecated = '',
bool $force_delete = false
)
get_delete_post_link()の引数
引数 | 型 | 説明 |
---|---|---|
$id | int / WP_Post | 削除する投稿IDまたはWP_Postオブジェクト |
$deprecated | string | 非推奨(昔のバージョン互換のため)→空文字を指定する |
$force_delete | bool | true の場合はゴミ箱に入れず即削除(完全削除) |
get_delete_post_link()の戻り値
- 文字列(URL)
- 権限がない場合は
null
get_delete_post_link()の実際のURL例
投稿ID=42の場合、通常はこんなURLが返ります。
https://example.com/wp-admin/post.php?post=42&action=delete&_wpnonce=abcdef123456
- このURLを踏むと、ゴミ箱に移動されます(
force_delete
がfalse
の場合)。 _wpnonce
はセキュリティ用トークンで、自動的に付与されます。
force_deleteの動作
force_delete | 動作 |
---|---|
false (デフォルト) | ゴミ箱へ移動 |
true | 完全削除(復元できない) |
完全削除URLの取得例
$url = get_delete_post_link(42, '', true);
get_delete_post_link()の実際のURL例
表示権限
- この関数は呼ぶだけなら誰でもできますが
- 実際にURLを踏んで処理できるのは削除権限があるユーザーだけです。
たとえば、投稿者は自分の投稿のみ削除できます。
管理者は全投稿を削除できます。
get_delete_post_link()の実際のURL例
基本的な使い方
1. URLだけ取得
$url = get_delete_post_link(42);
2. リンクを作る
<a href="<?php echo esc_url( get_delete_post_link(42) ); ?>"
onclick="return confirm('本当に削除しますか?');">
この投稿を削除
</a>
get_delete_post_link()の実際のURL例
実践例:条件つき表示
通常は権限を持つ人だけリンクを出す必要があります。
例:ログインユーザーかつ編集権限がある場合のみ
<?php
if ( current_user_can('delete_post', get_the_ID()) ) :
$url = get_delete_post_link();
?>
<a href="<?php echo esc_url($url); ?>"
onclick="return confirm('本当に削除してもよいですか?');">
削除する
</a>
<?php endif; ?>
カスタム投稿タイプでもOK
カスタム投稿(例: product
)も全く同じ書き方で使えます。
$url = get_delete_post_link($product_id);
get_delete_post_link()の実際のURL例
よくある誤解
このURLを「誰でも踏めると削除できる?」
→ できません。 _wpnonce
が有効で、かつ権限がないと処理できません。
get_delete_post_link()の実際のURL例
注意点
削除は非常に強い操作なので、以下を徹底しましょう。
onclick="return confirm()"
で確認ダイアログを出すforce_delete
は慎重に利用(完全削除は元に戻せない)current_user_can()
で権限を確認
フィルター
内部ではget_delete_post_link
フィルターを通るので、URLを動的に変更できます。
フィルターの例:URLをログ出力
add_filter('get_delete_post_link', function($link, $id, $force_delete){
error_log("削除リンク: {$link}");
return $link;
}, 10, 3);
編集リンクとの違い
関数 | 用途 |
---|---|
get_edit_post_link() | 編集画面URLを取得 |
get_delete_post_link() | 削除用URLを取得 |
- 編集は通常操作
- 削除は危険操作
この違いを意識して設計しましょう。
実用コード:アイコン付き削除ボタン
<?php
if ( current_user_can('delete_post', get_the_ID()) ) :
$url = get_delete_post_link();
?>
<a href="<?php echo esc_url($url); ?>"
onclick="return confirm('この投稿をゴミ箱に移動しますか?');"
class="delete-link">
🗑 削除
</a>
<?php endif; ?>
CSS例:
.delete-link {
color: #b32d2e;
font-weight: bold;
text-decoration: none;
}
.delete-link:hover {
text-decoration: underline;
}
よくある質問
- このURLを踏むと本当に削除される?
-
権限があれば即ゴミ箱に入ります。
- 完全削除したい
-
$force_delete
をtrue
にします。$url = get_delete_post_link(42, '', true);
- 非ログインユーザーが踏むと?
-
wp-login.php
にリダイレクトされます。 - 投稿IDを省略できる?
-
ループ内なら
get_the_ID()
が自動で使われます。
まとめ
get_delete_post_link()
は投稿削除URLを取得する関数- ゴミ箱に入れるか完全削除するか選べる
_wpnonce
付きで安全- 自分でリンクHTMLを作成する
- 権限確認は必須
ポイント
- 削除は操作ミス防止の確認ダイアログを付ける
esc_url()
を使ってエスケープcurrent_user_can()
で権限を明確化