取得したHTMLからリンク先のタイトルと概要文を抜粋します。
前回まで
リンク先サイトからHTMLを取得しました。
今回もコードを書いていく
OGPを取得する
metaタグからOGPの情報を取得します。
get_meta_tags()を使うと簡単そうですがget_meta_tags()はnameとcontentの組み合わせしか拾ってくれません。
OGPのmetaタグはpropertyとcontentなので正規表現で取りに行きます。
$html = curl_exec($ch); if (curl_errno($ch ) ) { $site_name = ''; $title = $url; $excerpt = ''; } else { if (preg_match('/property="og:title"\s*content="([^"]*)/si', $html, $m ) ) { $title = esc_html($m[1]); } if (preg_match('/property="og:description"\s*content="([^"]*)/si', $html, $m ) ) { $excerpt = esc_html($m[1]); } if (preg_match('/property="og:site_name"\s*content="([^"]*)/si', $html, $m ) ) { $site_name = esc_html($m[1]); } } curl_close($ch ); }
取得結果を表示する
とりあえず取得結果を返却してみましょう。
} else { if (preg_match('/property="og:title"\s*content="([^"]*)/si', $html, $m ) ) { $title = esc_html($m[1]); } if (preg_match('/property="og:description"\s*content="([^"]*)/si', $html, $m ) ) { $excerpt = esc_html($m[1]); } if (preg_match('/property="og:site_name"\s*content="([^"]*)/si', $html, $m ) ) { $site_name = esc_html($m[1]); } } curl_close($ch ); $html = '<DIV class="popo_bc_site_name">'.$site_name.'</DIV><DIV>'.$title.'</DIV><DIV>'.$url.'</DIV><DIV>'.$excerpt.'</DIV>'; return $html; }
確認してみる
記事中にショートコードを書いてみる
ちゃんと取得できているか確認してみましょう。
記事中に、
と書いてプレビューしてみましょう。
結果をプレビューで確認する
こんな感じで表示されたと思います。
ぽぽづれ。 | ←サイト名称 |
リンクをカードにするプラグインを作ろう! | ←タイトル |
https://popozure.info/popo-blogcard-test | ←URL |
リンクをカード形式で表示させるWordPressプラグインを作成していきます。 | ←概要文 |
ちゃんと取得できたみたいです。
今回のコード
今回はここまでです。
<?php /* Plugin Name: popo-Blogcard Plugin URI: https://popozure.info/20180808/13142 Description: Blogcard Version: 0.0.1 Author: poporon Author URI: https://popozure.info License: GPL2 */ class popo_blogcard { function __construct() { add_shortcode('blogcard', array($this, 'shortcode' ) ); } function shortcode($opt , $content = null ) { $url = $opt['url']; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt($ch, CURLOPT_TIMEOUT, 8 ); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true ); curl_setopt($ch, CURLOPT_MAXREDIRS, 8 ); curl_setopt($ch, CURLOPT_AUTOREFERER, true ); curl_setopt($ch, CURLOPT_COOKIESESSION, true ); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false ); $html = curl_exec($ch); if (curl_errno($ch ) ) { $site_name = ''; $title = $url; $excerpt = ''; } else { if (preg_match('/property="og:title"\s*content="([^"]*)/si', $html, $m ) ) { $title = esc_html($m[1]); } if (preg_match('/property="og:description"\s*content="([^"]*)/si', $html, $m ) ) { $excerpt = esc_html($m[1]); } if (preg_match('/property="og:site_name"\s*content="([^"]*)/si', $html, $m ) ) { $site_name = esc_html($m[1]); } } curl_close($ch ); $html = '<DIV class="popo_bc_site_name">'.$site_name.'</DIV><DIV>'.$title.'</DIV><DIV>'.$url.'</DIV><DIV>'.$excerpt.'</DIV>'; return $html; } } $popo_blogcard = new popo_blogcard;
次回は・・・
今回の取得方法で記事内容が取得できないサイトに対応しようと思います。
では、この辺で。(^-^)o
コメント