WordPressの投稿一覧から詳細ページではなく、固定ページや外部サイトなど任意のURLへのリンクに指定できるようにするカスタマイズを紹介します。
今回紹介するのは、カスタムフィールドにて入力したURLを functions.php にて取得しリンク先に差し替えるコードです。
目次
URL入力用のカスタムフィールドの作成
プラグインの Advanced Custom Fields を使用し、投稿のリンク先となる任意のURLを入力するためのカスタムフィールドを作成します。
- フィールドラベル:link_url
- フィールドタイプ:URL
フィールドラベルは任意の名前を付け、フィールドタイプはテキスト or URLに設定します。
その他の項目は必要に応じて設定します。

カスタムフィールドの表示位置は画像のように投稿に対して表示されるよう「投稿タイプ」「等しい」「投稿」と選択します。

以上で、投稿の編集画面に以下の画像のようにリンク先指定用の入力欄が表示されるようになります。

functions.php にコードを追記
function wp_post_link( $link, $post ) {
$meta = get_post_meta( $post->ID, 'link_url', TRUE );
$url = esc_url( filter_var( $meta, FILTER_VALIDATE_URL ) );
return $url ? $url : $link;
}
add_filter( 'post_link', 'wp_post_link', 10, 2 );
functions.php に上記のコードを追記することで、投稿のリンク先がカスタムフィールドに入力したURLへと差し替えられます。
2行目:カスタムフィールドから入力内容を取得
3行目:取得したURLにフィルター処理
4行目:$URLと$linkのどちらを戻り値として返すかの処理
5行目:投稿のリンク先書き換え用フィルターフック
カスタムフィールドにURLが入力されていない場合は、通常通りに投稿詳細ページへとリンクさせることが可能です。