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
で出力されます。
引き数と戻り値
引数名 | 型 | 説明 |
---|---|---|
$comment | int または 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()
は、WordPress のコメントに対して一意なパーマリンクを提供するためのシンプルで効果的な関数です。
引数で特定のコメントを指定できる柔軟性や、フィルターフックによるカスタマイズ性を持ちながら、エスケープ処理によりセキュアな出力を保証しています。
RSSフィードやコメント詳細へのリンクとして利用することで、ユーザーエクスペリエンスの向上やサイト内コンテンツの連携がスムーズに行える点が大きな魅力です。
コメント