MENU

get_delete_post_link()

get_delete_post_link() は、投稿や固定ページの削除リンクのURLを取得するためのテンプレートタグです。このリンクは管理者や編集権限を持つユーザーだけが使用でき、投稿を完全に削除またはゴミ箱に移動する機能を提供します。

目次

機能の説明

get_delete_post_link() は、指定した投稿を削除するためのURLを取得するためのテンプレートタグです。このタグを使えば、テーマ内で投稿削除用のリンクをカスタマイズすることができます。

  • デフォルトでは、削除リンクをクリックすると、投稿は「ゴミ箱」に移動されます。
  • 投稿の削除は、ユーザーの権限(例:delete_post)が確認されてから行われます。

シンプルなコード例

echo get_delete_post_link(get_the_ID());

出力例

https://example.com/wp-admin/post.php?post=123&action=delete&_wpnonce=abcd1234

使い方の解説

このテンプレートタグは、投稿IDに基づいて、その投稿の削除リンクを取得します。リンクの生成には、CSRF対策のために_wpnonce(WordPress Nonce)が含まれています。

引数

  1. $id(必須): 削除対象の投稿ID。
  2. $deprecated: 非推奨の引数です。基本的に使いません。
  3. $force_delete(任意): true に設定すると、ゴミ箱を経由せずに完全削除されます。

基本的な削除リンクの生成の例

$delete_link = get_delete_post_link(get_the_ID());
if ($delete_link) {
    echo '<a href="' . esc_url($delete_link) . '" onclick="return confirm(\'本当に削除しますか?\');">この投稿を削除</a>';
}

この例では、get_delete_post_link() で取得したURLを使って削除リンクを作成し、JavaScriptのconfirm()関数でユーザーに確認ダイアログを表示しています。

一緒に使うことが多い関連タグ

get_the_ID()

現在表示されている投稿のIDを取得するためのテンプレートタグです。これを使用して、削除対象の投稿を指定できます。

$delete_link = get_delete_post_link(get_the_ID());
echo '<a href="' . esc_url($delete_link) . '">削除する</a>';

wp_nonce_url()

CSRF(クロスサイトリクエストフォージェリ)対策のNonce付きURLを生成するテンプレートタグです。
get_delete_post_link() 内でもNonceは自動的に生成されますが、より詳細にカスタマイズしたい場合に使用します。

$nonce_url = wp_nonce_url(get_delete_post_link(get_the_ID()), 'delete_post_' . get_the_ID());
echo '<a href="' . esc_url($nonce_url) . '">削除する</a>';

追加情報を取得したい場合

投稿の詳細情報を取得する get_post()

get_post() を使用して、削除リンクと共に投稿の詳細情報を表示できます。

$post = get_post(get_the_ID());
echo 'タイトル: ' . $post->post_title . '<br>';
echo '投稿日: ' . $post->post_date . '<br>';
echo '<a href="' . esc_url(get_delete_post_link($post->ID)) . '">この投稿を削除</a>';

この例では、get_post() を使って投稿のタイトルと投稿日を取得し、その投稿に対応する削除リンクを表示しています。

出力できる情報

  • post_title: 投稿のタイトル
  • post_date: 投稿日
  • post_status: 投稿の公開状態(例:publishdraft

使用する事で想定されるトラブル

削除リンクが表示されない

ユーザーに投稿削除の権限がない可能性があります。

解決策

current_user_can() でユーザー権限を確認しましょう。

if (current_user_can('delete_post', get_the_ID())) {
    echo '<a href="' . esc_url(get_delete_post_link()) . '">削除する</a>';
}

ゴミ箱を経由せずに削除したい

通常、削除は「ゴミ箱」を経由します。

解決策

get_delete_post_link() の第三引数にtrueを指定します。

echo get_delete_post_link(get_the_ID(), '', true);

Q&A

get_delete_post_link() のリンクをクリックしても削除されないのはなぜですか?

ユーザーに削除権限がないか、URLのNonceが無効になっている可能性があります。Nonceの有効期限を確認してください。

ゴミ箱を経由せず完全に削除する方法は?

第三引数にtrueを指定します。

echo get_delete_post_link(get_the_ID(), '', true);

カスタム投稿タイプでも使えますか?

はい、get_delete_post_link() はカスタム投稿タイプにも対応しています。

まとめ

get_delete_post_link() は、投稿や固定ページの削除リンクを取得するためのテンプレートタグです。confirm()などのJavaScriptと組み合わせることで、削除操作に確認ステップを追加できます。また、current_user_can() を使ってユーザーの権限をチェックすることで、不要な削除リンクの表示を防げます。

このタグを使う際は、セキュリティ上の理由から必ずesc_url()でURLをエスケープすることを推奨します。また、wp_nonce_url() と組み合わせることで、より安全なリンクの生成が可能です。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

This site uses Akismet to reduce spam. Learn how your comment data is processed.

目次