get_delete_post_link()

get_delete_post_link()
目次

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()の引数

引数説明
$idint / WP_Post削除する投稿IDまたはWP_Postオブジェクト
$deprecatedstring非推奨(昔のバージョン互換のため)→空文字を指定する
$force_deletebooltrueの場合はゴミ箱に入れず即削除(完全削除)

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_deletefalseの場合)。
  • _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_deletetrueにします。

$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()で権限を明確化
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

初めてホームページを作成したのは1996年。
2000年よりフリーランスで主に中小企業、学校、各種公的団体、個人事業主のWordPressを活用したホームページ制作を行っています。WordPressテーマはそれぞれのクライアントに合わせて作成しています。
WordPressを活用したサイト運営のための情報発信をしていきます。

目次