プラグイン無し!外部&内部リンク対応ブログカード
マテリアルデザイン風ブログカード
プラグインを使わず、PHPとCSSのコピーで使える、内部&外部リンク対応のマテリアルデザイン風ブログカード(リンクカード)です。
WordPressの新しいエディタGutenberg だと、うまく表示できない時があることと、 内部と外部リンクどちらも対応してるブログカードが見つからなかったので、自作してみました。
WordPress以外でも使えます(外部リンクとして)。
特徴
内部リンク
URL相対パスを指定すると、内部リンクとして、右下に「記事を読む」が付きます(SEO効果)。
外部リンク
URL絶対パスを指定すると、外部リンクとして下部にURLを表示し、新規ウィンドウ(タブ)で開きます( PHPの部分を参考にさせていただいたブログです )。
- セキュリティの観点から、下部にURLを表示し透明性を高めました。
- target=”_blank”問題を加味し、rel=”noopener noreferrer”を入れています。
使い方
PHPやCSSに慣れていない人はバックアップを取って慎重に作業してください。
1つずつ更新して、エラーが出ないかページ確認することをおすすめします。
以下4ステップで完了です。
- 1. ブログカード用CSS を追加する
- 2. OpenGraph.php(OGP情報取得)を追加する
- 3. ブログカード用PHP を追加する
- 4. ショートコード でブログカードを表示する
1. ブログカード用CSSを追加
外観>テーマエディター> style.css、または 外観>カスタマイズ>追加CSS
2. OpenGraph.php を追加
リンク先から OpenGraph.phpをDLし、functions.php と同じ場所にアップロードします。
wp-content > themes > テーマのフォルダ 配下
アップロード方法がよくわからない人は、 functions.php 内にコードを貼ってもOKです。
外観>テーマエディター>functions.php
3. ブログカード用PHPを追加
外観>テーマエディター> functions.php
以下をコピーして貼り付けてください。
wordpress内で更新できない時は、レンタルサーバーのエディタやFTPクライアントで以下のパスのファイルを更新します。
wp-content > themes > テーマのフォルダ > functions.php
4. ショートコードを入れる
ブログカードを入れたい場所にショートコード(ウィジェット)を入れます。
外部リンクの場合、http~の絶対パス(URL)を指定します(下記{}を[]にして下さい)
{nlink url="https://blog.ukarelife.com/handmadelotion/"}
内部リンクの場合、ホスト名の後ろのディレクトリ以下の相対パスを指定します(下記{}を[]にして下さい)
{nlink url="/handmadelotion/"}
設定・カスタマイズ
メタデータ取得先(必須)
// $output = get_the_excerpt(); // 通常
// $output = get_post_meta($post_id,'_yoast_wpseo_metadesc',true); // YoastSEO
$output = get_post_meta($post_id,'_aioseop_description',true); // AllinOneSEO
phpの69~71行目は、お使いのプラグインによってどれか一つ有効にしてください(内部リンク時の取得先です)。
AllinOneSEO用になってます。
行の先頭に//を入れてコメントアウトすると無効になります。
デバイス別 文字数設定(任意)
上の画像はスマホで見たときの表示例で、タイトルが20文字、説明文が30文字の設定です。
// 文字数設定(マルチバイト文字数)
$arrc = array(
't' => array( // Title
'xs' => 20, // SmartPhone
'xm' => 40, // Tablet
'pc' => 40 // Pc
),
'd' => array( // Description
'xs' => 30, // SmartPhone
'xm' => 55, // Tablet
'pc' => 55 // Pc
)
);
phpの47行目~にある文字数設定は、 スマホ・タブレット・PCで見たときの タイトル(title)と説明(description)の文字数をそれぞれ設定できます。
マルチバイト関数で数えてるので、日本語1文字を1として数えます(すごい適当な文字数にしてます)。
他のブログカードを見ると、スマホ表示時はタイトルのみ表示にしてるところが多いようでしたが、説明も入れてみました。
cssのみでは文字数制限ができないから、説明文を非表示にするといった措置になっていると思われます。
No Image画像(任意)
//アイキャッチ画像がない場合の画像を指定
$no_image = 'https://*********/noimage.jpg';
php 85行目に、アイキャッチ画像が取得できない場合の画像を指定できます。
No Image用画像をメディアからアップロードしてパスを指定してください。
CSSデザイン(任意)
マテリアルデザイン風(1枚の紙が浮いてるような)にしてますが、もちろんcssも自由にカスタマイズできます。
後記
- 仕事レベルのしっかりとしたコードでもないしテストもあまりしてません…。
- css苦手です…。どなたかすてきなcssにしてくれると嬉しいです。
- php部分で不具合・要望のコメントもらえたら対応できるかもしれません。
- コード表示にGist使ったけど、script埋め込んでるので、AMP対応するときに他の方法考えないと…。
- 非エンジニアの方でもわかりやすく書いてるつもりですが、分かりにくい表現があったらコメントくださいませ。
- サムネイルをレクタングルにするか正方形にするか悩みどころ…。
やったほうがいいかなと思うこと
- 外部リンク時のURLの文字数制限(はみでないように)
- div全体をリンクにしたいけどうまくいかない…
-
前の記事
子宮腺筋症でミレーナをいれた(5年後ジエノゲスト服用) 2019.09.05
-
次の記事
サーチコンソールのドメイン所有権登録(バリュードメイン) 2019.09.09