MENU

comment_link()

comment_link() は、現在のコメントまたは指定したコメントオブジェクト/IDに対応するパーマリンクを取得し、エスケープ処理(esc_url())を適用した上でそのリンクを出力します。

RSSフィードやコメント一覧、詳細ページなど、各コメントに一意なリンクを提供する際に利用されます。

この関数は、内部で WordPress のフィルターフック comment_link を適用しているため、必要に応じてプラグインやテーマでリンクの形式をカスタマイズすることも可能です。

目次

基本構文

基本的な使い方は非常にシンプルです。以下のコードは、グローバルなコメントオブジェクトからリンクを出力する例です。

<?php
   comment_link();
?>

また、特定のコメントIDやコメントオブジェクトを指定する場合は次のようにします。

<?php
   $comment_id = 15; // 任意のコメントIDをセット
   comment_link( $comment_id );
?>

関数内部では get_comment_link( $comment ) が呼び出され、対象コメントのパーマリンクが取得されます。
続いて、apply_filters( 'comment_link', ... ) によってリンクに対するカスタマイズや追加処理を行います。
最後に esc_url() でエスケープ処理されたリンクが echo で出力されます。

引き数と戻り値

引数名説明
$commentint または WP_CommentコメントID または WP_Comment オブジェクト。省略可能。省略時はグローバルコメントが使用されます。
戻り値名説明
なしなし関数はリンクを echo 出力します。戻り値はありません。出力はエスケープ処理済みのURLです。

使用例

グローバルなコメントオブジェクトの場合

<?php
   // コメントループ内でグローバルなコメントオブジェクトがセットされている場合
   comment_link();
?>

グローバルなコメントコンテキストのリンクを出力します。主にコメント一覧やフィード内で使用され、各コメントに一意なパーマリンクを提供します。

特定のコメントIDを指定する場合

<?php
   $comment_id = 42; // 任意のコメントID
   comment_link( $comment_id );
?>

指定したコメント ID のパーマリンクを取得し、エスケープした上で出力します。これにより、特定のコメントにリンクを直接貼り付ける場合などに利用されます。

コメントオブジェクトを直接渡す例

<?php
   $comment = get_comment( 42 ); // コメントオブジェクトを取得
   comment_link( $comment );
?>

取得したコメントオブジェクトを利用し、そのコメントへのパーマリンクを出力します。これもまた、柔軟性の高い利用例です。

注意点

グローバルなコメントオブジェクトの前提

関数に引数を渡さない場合は、グローバルなコメントオブジェクトに依存します。そのため、コメントループやコンテキストが正しくセットされていない箇所で使用すると、意図しない結果になる可能性があります。

フィルターフックによるカスタマイズ

内部で apply_filters( 'comment_link', ... ) が使われているため、プラグインやテーマでこのフィルターを設定している場合、想定外のリンク形式になる場合があります。カスタマイズが有効かどうか確認してください。

よく一緒に使われる関数

get_comment_link()

<?php
$link = get_comment_link( get_comment_ID() );
echo '<a href="' . esc_url( $link ) . '">このコメントへ</a>';
?>

comment_link() の内部でも使用されている関数で、コメントのパーマリンク(URL)を取得します。出力せずに値として取得したい場合に便利です。

get_comment_ID()

<?php
echo get_comment_ID();
?>

現在のコメントループ内でコメントIDを取得します。get_comment_link()get_comment_author_link() などと組み合わせて使われます。

get_comment_author_link()

<?php
echo get_comment_author_link();
?>

コメント投稿者の名前をリンク付きで出力します。comment_link() と組み合わせて、コメントリストのカスタマイズに役立ちます。

想定されるトラブル

コメントが存在しない状態で comment_link() を呼び出す

  • 原因:グローバル $comment が未定義、またはコメントループ外で呼び出している。
  • 影響:空のリンクが出力されたり、PHPエラーが発生する可能性があります。

解決方法

<?php
if ( have_comments() ) {
    while ( have_comments() ) {
        the_comment();
        comment_link(); // 安全に使用可能
    }
}
?>

または、明示的に $comment を渡す方法も有効です。

comment_link() の出力をカスタマイズできない

  • 原因comment_link()echo による出力専用のため、URLを加工したい場合に不便。
  • 影響:HTML構造や属性を柔軟に変更できない。
<?php
$link = get_comment_link( get_comment_ID() );
echo '<a href="' . esc_url( $link ) . '" class="custom-class">コメントを見る</a>';
?>

get_comment_link() を使ってURLを取得し、HTMLを自分で組み立てることで柔軟に対応できます。

Q&A

comment_link() は何をする関数ですか?

投稿またはページに付けられたコメントへのリンク(URL)を出力する関数です。通常、ループ内で使用され、各コメントへのリンクが生成されます。

comment_link() に引数を渡す必要はありますか?

通常は引数なしで使用できます。引数 $comment を指定すれば、特定のコメント ID または WP_Comment オブジェクトを対象にリンクを生成できます。

comment_link() は戻り値としてURLを返しますか?

いいえ、この関数は echo によってリンクを直接出力します。値として返されるのではなく、そのまま画面に表示される仕様です。

get_comment_link() との違いは?

get_comment_link() はリンクURLを「返す」関数で、テンプレート内で加工したい場合などに便利です。一方、comment_link() はリンクを「そのまま出力」するため、すぐに表示したい時に使います。

コメントが存在しない場合にエラーになりますか?

通常は WordPress ループ内で使われるため、対象のコメントが正しく設定されていれば問題ありません。ただし、コメントが存在しない状態で手動で呼び出す場合は、グローバル $comment が設定されているかを確認する必要があります。

まとめ

comment_link() は、WordPress のコメントに対して一意なパーマリンクを提供するためのシンプルで効果的な関数です。

引数で特定のコメントを指定できる柔軟性や、フィルターフックによるカスタマイズ性を持ちながら、エスケープ処理によりセキュアな出力を保証しています。

RSSフィードやコメント詳細へのリンクとして利用することで、ユーザーエクスペリエンスの向上やサイト内コンテンツの連携がスムーズに行える点が大きな魅力です。

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

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次