get_edit_post_link()
は、指定された投稿や固定ページの編集画面へのURLを返すテンプレートタグです。このタグは、編集権限のあるユーザーが投稿を編集するためのリンクをカスタマイズする際に便利です。
機能の説明
get_edit_post_link()
は、指定した投稿IDに基づいて、その投稿の編集画面へのURLを取得します。edit_post_link()
と異なり、URL自体を返すだけなので、HTMLの出力を自分で制御したい場合に使われます。
- 管理者や編集権限のあるユーザー向けのURLを生成します。
- このタグを使えば、リンクの見た目を自由にカスタマイズできます。
シンプルなコード例
$url = get_edit_post_link();
echo $url;
解説
https://example.com/wp-admin/post.php?post=123&action=edit
使い方の解
このテンプレートタグは、テーマのテンプレートファイル(例:single.php
、page.php
)で使用され、投稿の編集URLを取得します。URLを使用して、カスタムHTMLやJavaScriptで編集リンクを自由に作成することができます。
引数
$id
(任意): 投稿IDを指定します。省略すると、現在表示中の投稿のIDが使用されます。$context
(任意):display
もしくはraw
を指定できます。display
はエスケープ済みのURL、raw
は生のURLを返します。$blog_id
(任意): マルチサイト環境でのサイトIDを指定します。
基本的な編集リンクを作成する例
$edit_link = get_edit_post_link();
if ($edit_link) {
echo '<a href="' . esc_url($edit_link) . '">編集する</a>';
}
この例では、get_edit_post_link()
で取得したURLを使って、<a>
タグを生成し、「編集する」というリンクを出力しています。esc_url()
でURLをエスケープすることで、セキュリティ対策を施しています。
一緒に使うことが多い関連タグ
edit_post_link()
edit_post_link()
は、編集リンクのHTMLタグ全体を出力するテンプレートタグです。get_edit_post_link()
と異なり、自分でHTMLを記述する必要がないため、手軽に編集リンクを表示したい場合に便利です。
edit_post_link('この投稿を編集', '<p>', '</p>');
解説
このコードでは、<p>
タグで囲まれた編集リンクが出力されます。
get_the_ID()
get_the_ID()
は、現在表示されている投稿や固定ページのIDを取得するテンプレートタグです。これを使えば、特定の投稿の編集リンクを取得するために、get_edit_post_link()
の第一引数に渡すことができます。
$edit_link = get_edit_post_link(get_the_ID());
echo '<a href="' . esc_url($edit_link) . '">投稿を編集</a>';
この例では、get_the_ID()
で取得した投稿IDを使って、その投稿の編集リンクを表示しています。
追加情報を取得したい場合
投稿の詳細情報を取得する get_post()
get_post()
を使用して、編集リンクと共に投稿のタイトルや投稿者名を表示できます。
$post = get_post(get_the_ID());
echo '投稿タイトル: ' . $post->post_title . '<br>';
echo '投稿者: ' . get_the_author_meta('display_name', $post->post_author) . '<br>';
echo '<a href="' . esc_url(get_edit_post_link($post->ID)) . '">この投稿を編集する</a>';
この例では、get_post()
を使って投稿のタイトルと投稿者名を取得し、それに対応する編集リンクを表示しています。
出力できる情報
- post_title: 投稿のタイトル
- post_content: 投稿の本文
- post_author: 投稿者のID
- post_date: 投稿日時
- post_status: 投稿の公開状態(例:
publish
、draft
)
想定されるトラブル
編集リンクが取得できない
投稿が存在しない、または現在のユーザーに編集権限がない場合、リンクが取得されません。
解決策
current_user_can()
を使用して、ユーザーの権限を確認してください。
if (current_user_can('edit_post', get_the_ID())) {
echo '<a href="' . esc_url(get_edit_post_link()) . '">編集</a>';
}
URLが正しくエスケープされない
URLが生の状態で出力されているため、不正な文字が含まれる可能性があります。
解決策
esc_url()
でURLをエスケープするようにしましょう。
$edit_link = get_edit_post_link();
echo '<a href="' . esc_url($edit_link) . '">編集する</a>';
Q&A
まとめ
get_edit_post_link()
は、投稿やページの編集リンクのURLを取得するためのテンプレートタグです。編集リンクを自分でカスタマイズしたい場合に便利で、edit_post_link()
との使い分けが重要です。
このタグを使う際は、esc_url()
でURLのエスケープを忘れずに行い、current_user_can()
で権限を確認することで、想定外のトラブルを防げます。また、get_the_ID()
などの関連タグと一緒に使うことで、より柔軟なカスタマイズが可能になります。
コメント