get_edit_post_link()

get_edit_post_link()
目次

get_edit_post_link()とは?

get_edit_post_link()
指定した投稿やページの「編集画面URL」を取得する関数
です。

管理者や編集者が投稿編集画面へのリンクを自作したいときに利用します。

たとえば:

<a href="<?php echo esc_url( get_edit_post_link() ); ?>">この投稿を編集</a>

と書くと、管理画面の編集ページへのリンクが作れます。

get_edit_post_link()の基本の書式

get_edit_post_link( int|WP_Post|null $id = null, string $context = 'display' )

get_edit_post_link()の引数

引数説明
$idint / WP_Post / null投稿IDまたはWP_Postオブジェクト。省略時は現在のループ内の投稿
$contextstringコンテキスト(表示用か送信用)。通常は 'display' のままでOK

get_edit_post_link()の戻り値

文字列(編集画面URL)

権限がない場合は null

get_edit_post_link()の実際の動作例

投稿ID=42の編集URLを取得する:

$url = get_edit_post_link(42);

出力例:

https://example.com/wp-admin/post.php?post=42&action=edit

コンテキスト($context)とは?

$contextには以下の2つの値を指定できます。

  • 'display'(デフォルト)
    → ブラウザに表示する用のURL(esc_url()する想定)
  • 'attribute'
    → HTML属性用にエスケープがかかったURL

ほとんどのケースでは'display'で問題ありません。

表示権限

この関数を呼ぶとき、次の条件を満たすユーザーだけURLが返ります。

  • ログイン中
  • edit_post権限がある(通常は管理者・編集者)

権限がない場合はnullが返るので注意してください。

get_edit_post_link()の使い方の実例

1. シンプルに取得して表示

<?php
$url = get_edit_post_link();
if ( $url ) {
  echo '<a href="' . esc_url($url) . '">この投稿を編集</a>';
}
?>
  • 権限がない場合はリンクが出ません。

2. 投稿IDを指定

$url = get_edit_post_link(123);

3. WP_Postオブジェクトを指定

$post = get_post(42);
$url = get_edit_post_link($post);

edit_post_link()との違い

よく混同されるので比較します。

関数内容
get_edit_post_link()URLを「文字列」で返す
edit_post_link()<a>タグを「そのまま出力」する

edit_post_link()の例

edit_post_link('編集');

上記は自動でリンクを出力します。

一方、get_edit_post_link()URLだけ欲しい場合に使う関数です。

フィルターフック

この関数は内部でget_edit_post_linkフィルターを呼びます。

例:編集リンクをカスタマイズする

たとえば全ての編集リンクを管理画面ダッシュボードに差し替える例:

add_filter('get_edit_post_link', function($link, $post_id, $context){
  return admin_url();
}, 10, 3);

get_edit_post_link()のよくある実用例

アイコン付きボタンにする

<?php
$url = get_edit_post_link();
if ($url) :
?>
  <a href="<?php echo esc_url($url); ?>" class="edit-button">
    ✎ 編集
  </a>
<?php endif; ?>

CSS例:

.edit-button {
  display: inline-block;
  background: #0073aa;
  color: #fff;
  padding: 6px 12px;
  border-radius: 4px;
  text-decoration: none;
  font-size: 0.9em;
}
.edit-button:hover {
  background: #005177;
}

カスタム投稿タイプでもOK

カスタム投稿(例:product)も同じです。

$url = get_edit_post_link($product->ID);

権限の確認

get_edit_post_link()は自動的に権限を確認するため、
権限がないユーザーにURLが返ることはありません。

  • 自分でcurrent_user_can()を書く必要なし。

get_edit_post_link()のよくある質問

ゲストには見えますか?

見えません。ログイン&権限が必要。

カスタム投稿も使える?

問題なく対応。

URLにnonceはつく?

編集URLはnonceは不要(管理画面で再度チェックが走ります)。

表示テキストは?

この関数はURLだけ返すので、表示テキストは自分で書きます。

応用:条件分岐で表示を調整

特定のユーザー権限だけ表示する場合:

if ( current_user_can('manage_options') ) {
  $url = get_edit_post_link();
  if ($url) {
    echo '<a href="' . esc_url($url) . '">管理者用編集リンク</a>';
  }
}

他の関連関数

関数内容
edit_post_link()編集リンクをHTMLで直接出力
get_edit_term_link()ターム(カテゴリー・タグ)の編集URLを取得
get_edit_comment_link()コメント編集URLを取得

まとめ

  • get_edit_post_link()は投稿編集画面のURLを取得する関数
  • edit_post_link()との違いは「URLだけ返す」こと
  • 権限がないとnullを返す
  • カスタム投稿も対応
  • フィルターフックでURLをカスタマイズ可能

ポイント

  • リンクHTMLは自分で書く
  • esc_url()でエスケープする
  • 権限は自動チェックされる
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次