こんにちは、エリカです。
Google Analyticsなどで計測したデータを、せっかくだからサイトのコンテンツとして活用したいと思ったことはありませんか?
例えば、Google Analyticsと連携して昨日閲覧された記事のランキングを作りたいときなど、その記事のURLはわかるけれども、サムネイルやタイトルなどの他の情報がわからないというときは、どうすればいいでしょうか。
今回は、サイトがWordPressで構築されている場合、記事の一部の情報からその記事情報へアクセスするためにはどのような方法があるかを調べてみました。
まずは記事のIDがわかっている場合です。
記事のIDというのは、パーマリンク構造でいうところの%post_id%にあたる部分ですね。この場合は非常にシンプルです。
$post = get_post(記事ID);
これで該当する記事情報を参照できます。
URLの場合です。
ブラウザのアドレスバーに表示されたり、シェアされたり、アクセス解析で計測されていたりするURLから記事情報が欲しい場合です。非常に便利な関数があります。
$post = url_to_postid(記事URL);
これで該当する記事情報を参照できます。
タイトルから調べたい場合もあるかと思います。
SEOプラグインなどで出力されるページタイトルと記事タイトルが異なる場合を除けば、下記のようなコードで該当の記事情報を参照できます。
$post = get_page_by_title(タイトル, OBJECT, 'post');
ただし、記事タイトルは重複して設定することができてしまいますので、その場合は意図した結果にならないかもしれません。
パーマリンク構造でいうところの%postname%、いわゆるスラッグから探す場合は、下記のようになります。
$post = get_page_by_path(スラッグ, OBJECT, 'post);
これで該当する記事情報を参照できます。
ただし、パーマリンク構造を複雑にしている場合などで、URL中に同じスラッグが設定されているなどすると意図した結果にならないかもしれません。
上記の方法を利用して、本文中に設置するサイト内リンクを、より豪華にするショートコードを作成してみました。
/**
* サイト内LINKを豪華にしちゃいます♡
*/
function rich_link ($atts) {
$link = '';
$post_id = 0;
$output = '';
extract(shortcode_atts(array(
'link' => ''
), $atts));
if (preg_match('/^\d+$/', $link)) {
// ID
$post_id = $link;
} else if (preg_match('/^https?:/', $link)) {
// URL
$post_id = url_to_postid($link);
} else {
// タイトル or スラッグ
$post = get_page_by_title(trim($link), OBJECT, 'post');
if ( ! empty($post->ID)) {
$post_id = $post->ID;
} else {
$post = get_page_by_path(trim($link), OBJECT, 'post');
if ( ! empty($post->ID)) {
$post_id = $post->ID;
}
}
}
if ($post_id) {
if (empty($post)) {
$post = get_post( $post_id );
}
if ($post) {
$output.= '<a href="' . get_the_permalink( $post->ID ) . '">';
$output.= '<div>';
$output.= get_the_post_thumbnail($post->ID);
$output.= get_the_title($post->ID);
$output.= '</div>';
$output.= '</a>';
}
}
return $output;
}
add_shortcode('rich_link', 'rich_link');
$outputの部分は適宜調整する必要がありますが、
[rich_link link="ID or URL or タイトル or スラッグ"]
みたいなショートコードを本文中に記述すると、サムネイルとタイトルのリンクが表示されます。
便利な関数がたくさんありますね。
特に外部のサービスと連携するとき、URLしかやり取りできないんだけどといった場合に、こういうことを知っておくとより見積もりがしやすいのではないかなと思いました。
それでは。
【WordPressのメディアサイトをカスタマイズ】
※ WordPressの記事内の画像をData URIで扱ってサイトを高速化させる方法
※ 公開前の記事を共有できるWordPressプラグイン「Public Post Preview」
※ WordPressの管理画面にPDFマニュアルを埋め込んで、運営コストを削減しよう