WordPressに記事IDで呼び出すブログカードを追加する
内部リンクを目立たせて表示させる、いわゆるブログカードという機能があります。
このブログにも実装しましたので、やり方を紹介します。
追加するブログカードの条件
僕がブログカードに求める条件は以下の2つです。
- プラグインを使用しないこと
プラグインを使用すると、読み込み速度が落ちてしまいます。
ブログカードを表示する定番のプラグイン「Pz-LinkCard」は、非常に重たいことで有名です。
悪影響を抑えるために、直接書き込んで実装します。 - 記事IDで指定できること
URLで記事を指定するショートコードだと、パーマリンクを変更した際に修正が必要になります。
パーマリンクを変更することは滅多にありませんが、念の為、記事IDで指定できるようにします。
パーマリンクに関しては下の記事で説明しています。
こんな感じのブログカードを実装します。
記述するコード
こちらのサイトを参考に、function.phpにコードを追加しました。
抜粋は必要ないので、不要な部分は削っています。
また、URLから記事IDを取得する処理を削除し、逆に記事IDからURLを取得しています。
//内部リンクをはてなカード風にするショートコード function kanren_scode($atts) { extract(shortcode_atts(array( 'postid'=>"", ),$atts)); $post = get_post($postid);//記事IDから投稿情報の取得 $url = get_permalink($postid);//記事IDからURLの取得 $title = get_the_title($postid);//タイトルを取得 $date = mysql2date('Y-m-d', $post->post_date);//投稿日の取得 $img_width ="90";//画像サイズの幅指定 $img_height = "90";//画像サイズの高さ指定 $no_image = get_template_directory_uri().'/img/no-image.gif';//アイキャッチ画像がない場合の画像を指定 //アイキャッチ画像を取得 if(has_post_thumbnail($postid)) { $img = wp_get_attachment_image_src(get_post_thumbnail_id($postid),array($img_width,$img_height)); $img_tag = "<img src='" . $img[0] . "' alt='{$title}' width=" . $img[1] . " height=" . $img[2] . ">"; } else { $img_tag ='<img src="'.$no_image.'" alt="" width="'.$img_width.'" height="'.$img_height.'">'; } $kanren .=' <div class="blog-card"><a href="'. esc_url($url) .'"> <div class="blog-card-thumbnail">'. $img_tag .'</div> <div class="blog-card-content"> <div class="blog-card-title">'. esc_html($title) .' </div> <div class="blog-card-date"> <i class="fas fa-pencil-alt"></i> '.$date.' </div> </div> <div class="cb"></div> </a></div>'; return $kanren; } add_shortcode("kanren", "kanren_scode");
ショートコードの名称を変更して、オープンケージのテーマのショートコードと互換性を持たせています。
僕は、運営している他のサイトでオープンケージのテーマを使っています。
なので、その方が書いてて違和感が少ないという個人的な理由です。
下記のように、記事のIDを渡してあげるとブログカードが表示されます。
[kanren postid="351"]
コードの解説
仕組みのわからないコードを貼り付けるのには抵抗がある方もいるでしょう。
ですので、簡単にプログラムの意味を解説していきます。
まず、ショートコードで記事IDを引数として渡します。
すると、$postidという変数の中に、記事IDが代入されます。
$post = get_post($postid);//記事IDから投稿情報の取得 $url = get_permalink($postid);//記事IDからURLの取得 $title = get_the_title($postid);//タイトルを取得 $date = mysql2date('Y-m-d', $post->post_date);//投稿日の取得
get_post()は記事IDで指定した記事のレコードをデータベースから取得する関数です。
取得した情報を$postに代入して、それを使って$dateに投稿日の情報を代入しています。
get_permalink()は記事のURLを取得する関数です。
ブログカードはリンクですので、当然ですが遷移するURLが必要です。
$kanren .=' <div class="blog-card"><a href="'. esc_url($url) .'"> <div class="blog-card-thumbnail">'. $img_tag .'</div> <div class="blog-card-content"> <div class="blog-card-title">'. esc_html($title) .' </div> <div class="blog-card-date"> <i class="fas fa-pencil-alt"></i> '.$date.' </div> </div> <div class="cb"></div> </a></div>'; return $kanren; }
$kanrenという変数に実際に表示させるHTMLを代入して、returnで返します。
phpにおける「.」は文字列の連結を意味します。
投稿日の前にを表示させています。
Fontawesomeを読み込んでいない場合は消してください。
URLとタイトルは、それぞれesc_url()とesc_html()でエスケープしています。
第三者の入力した値を出力するわけではないのではありませんが、エスケープできるものはしておいたほうがいいでしょう。
33行目ではfloatを解除しています。
僕は、cssに以下のコードが書いてあります。
.cb { /* floatを解除 */ clear: both; }
floatを解除しないとサムネイルがはみ出す原因になります。
cssも変更するのが面倒な方は、下記のコードで置き換えてください。
<div style="clear: both;"></div>
デザインをカスタマイズ
style.cssにブログカードに関する記述を追加します。
こちらのサイトを参考に、Sassで書きました。
僕のブログの記事一覧との統一感を出したかったので、影を使ったデザインにしました。
カーソルを乗せるとフワッとします。
言葉で表すのは難しいので、実際にカーソルを乗せてみてください。
.blog-card { border:1px solid #ddd; box-shadow: 0 0 8px rgba(0,0,0,0.05); word-wrap:break-word; max-width:100%; margin-bottom: 30px; a { color: #38383e; background: #fff; display: block; text-decoration: none; -webkit-transition: box-shadow 0.2s ease-in-out; -moz-transition: box-shadow 0.2s ease-in-out; -o-transition: box-shadow 0.2s ease-in-out; transition: box-shadow 0.2s ease-in-out; &:hover { box-shadow: 0 0 10px rgba(0,0,0,0.1); } } } .blog-card-thumbnail{ float:left; padding:10px; img { display: block; padding: 0; -webkit-transition: 0.3s ease-in-out; -moz-transition: 0.3s ease-in-out; -o-transition: 0.3s ease-in-out; transition: 0.3s ease-in-out; } } .blog-card-content{ line-height:120%; } .blog-card-title{ padding:10px 10px 10px 0; font-size:85%; &:before { content: '関連記事'; font-size: 0.7em; font-weight: bold; color: #fff; background: #111; width: 5em; display: inline-block; padding: 0.2em; position: relative; top: -2px; text-align: center; margin-right: 0.5em; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; } } .blog-card-date{ color: lighten(#38383e, 10%); font-size:75%; margin-right:10px; }
この記事を書くにあたって、TSUNJI様のこまろくNOTEを参考にさせて頂きました。
回遊率を上げるためには、内部リンクの設置が重要です。以前書いた記事も定期的にリライトして、他の記事との繋がりを強化しましょう。