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)が含まれています。
引数
$id
(必須): 削除対象の投稿ID。$deprecated
: 非推奨の引数です。基本的に使いません。$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: 投稿の公開状態(例:
publish
、draft
)
使用する事で想定されるトラブル
削除リンクが表示されない
ユーザーに投稿削除の権限がない可能性があります。
解決策
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()
は、投稿や固定ページの削除リンクを取得するためのテンプレートタグです。confirm()
などのJavaScriptと組み合わせることで、削除操作に確認ステップを追加できます。また、current_user_can()
を使ってユーザーの権限をチェックすることで、不要な削除リンクの表示を防げます。
このタグを使う際は、セキュリティ上の理由から必ずesc_url()
でURLをエスケープすることを推奨します。また、wp_nonce_url()
と組み合わせることで、より安全なリンクの生成が可能です。
コメント