リンクをカード形式で表示するWordPressプラグイン「Pz-LinkCard」を公式プラグインディレクトリにて公開中です。
このプラグインは何?インストールはどこから?
リンクを紹介するときに、カード形式で表示できちゃうWordPressプラグインです。
Pz-LinkCardの使い方やインストール方法をまとめたページを用意しています。
お手数ではありますが、ちょっと興味がありましたら見てみてくださいませ。
変更点など
ここ何回かのバージョンアップで、毎回OGP情報とかをパースするところを直している気がします。
これも未熟ゆえ…いやあ、勉強になります(^-^;
下記のような修正をしています。興味のある方はお読みください。
とりあえず、使う方を考える通常の方は、タイトルや抜粋文が取得できずに空欄になっているリンクがあったら、「ツール」→「Pz カード管理」から、該当のリンクにチェックを付けて「削除」をしてください。
(「抜粋文」順に並べると消しやすいかと思います。)
そのページを表示しなおすと、タイトルと抜粋文が取得できるかも知れません。
それでも取得できないページは、コメントかツイッター(@popozure)で教えていただけると対処できるかも知れません。
HEADの切り出しに失敗してました…
リンク先のHTMLを取得して、OGP情報とかを取得してくるのですが、毎回毎回 <head>~</head> から、<body>~</body> まで見てると、大きいページだと効率が悪そうなので、<head>~</head> にしてから、metaタグを拾っています。
// HEADタグ $head = null; if (preg_match('/<head>(.*)</head>/si', $html, $m)) { $head = $m[1]; }
ところが、タイトルが空欄に、抜粋文も空欄に…というサイトが。
HTMLソースを見ると、ちゃんとmetaタグとかあって、og:title も og:description も定義されています。
ぽぽろん「なんでだー?Σ(゚ロ゚)o゙」
<meta property="og:title" content="ぽっぽぽぽで!ずっれずれで!ぽぽづれ!Σ(゚ロ゚)o゙"/> <meta property="og:type" content="article"/> <meta property="og:url" content="https://popozure.info"/>
ぽぽろん「なんでだー?Σ(゚ロ゚)o゙」
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#"> <meta charset="utf-8"/> <title>ぽっぽぽぽで!ずっれずれで!ぽぽづれ!Σ(゚ロ゚)o゙</title>
ぽぽろん「OGP情報取れなくても、title もあるのになー?Σ(゚ロ゚)o゙」
…Σ(゚ロ゚;o゙
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#">
ぽぽろん「おや…ヘッダのようすが…Σ(゚ロ゚;o゙」
どうやら、「og:」というプロパティーを有効にするオマジナイのようです(?)。
とりあえず、 <head> は < h e a d > の6文字しか無いと思い込んでいたので、ちょっと直します(^-^;
if (preg_match('/<\s*head\s*[^>]*>(.*)<\s*\/head\s*>/si', $html, $m)) { $head = $m[1]; }
はい、取れましたΣ(゚ロ゚)o゙
空欄のままキャッシュされているので、「ツール」→「Pz カード管理」から、タイトルや抜粋文が空っぽのままキャッシュされているやつにチェックを入れて削除、記事を表示させておいてください。
(別の原因でタイトルや抜粋文が取得できていない場合には、変わりません。)
ダブルクォートの悪夢、ふたたび
パラメータの取得はWordPressにまかせているのですが、URLにダブルクォートが含まれてくることがありました…!Σ(゚ロ゚)o゙
あれこれパターンを調べてみると、抜粋文をパラメータで指定しているときに、「閉じの半角角かっこ ] 」とかがあると、半端でそこで区切られるだけでなく、「閉じのダブルクォート」 が無い状態になるので、「ダブルクォート」もパラメータの一部として返してくれるようです。
(よく分からない日本語ですね(^-^;)
こうだと、
[blogcard url="https://popozure.info/pz-linkcard" title="紹介したいプラグインがあるよ!(^-^)o"]
こんな感じでパラメータが入ってくるのですが、
Array ( [url] => https://popozure.info/pz-linkcard [title] => 紹介したいプラグインがあるよ!(^-^)o ) |
こうだと、
[blogcard url="https://popozure.info/pz-linkcard" title="紹介したい[プラグイン]があるよ!(^-^)o"]
こうなっちゃうんですね。
Array ( [url] => ”https://popozure.info/pz-linkcard” [title] => ”紹介したい[プラグイン ) |
「”」から始まって、「”」はまだ来ていないですが、「 ] 」が来たところで、パラメータを区切ってしまうようです。
そういえばこれには気付いていて、Pz-HBC専用ブックマークレットでは、半角角かっこ [ ] を全角に変換しています。
しかも、format.php を通ってきちゃうんだか、先頭の1文字目も最後の1文字も指定した半角ダブルクォートでは無くて、全角ダブルクォート「”」なんです。
まあ、とりあえず、preg_replaceとかで、前後の「半角・全角」の「空白・シングルクォート・ダブルクォート」を除去してみましょう。
$url = preg_replace('/^[\s \'\"‘’“”]*(.*?)[\s \'\"‘’“”]*$/u', '\1', $url);
はい!(^-^)o
”https://popozure.info/pz-linkcard” |
ぽぽろん「取れてなぁぁい!Σ(゚ロ゚)o゙」
なんという、がんこな…。
何者なんでしょう、このダブルクォート。
手っ取り早く見てみましょう。
echo mb_strcut($url, 0, 1).'<br>'; echo mb_strcut($url, 1, 1).'<br>'; echo mb_strcut($url, 2, 1).'<br>'; echo mb_strcut($url, 3, 1).'<br>'; echo mb_strcut($url, 4, 1).'<br>'; echo mb_strcut($url, 5, 1).'<br>'; echo mb_strcut($url, 6, 1).'<br>';
1文字ずつ表示してみます。
& # 8 2 2 1 ; |
ぽぽろん「そういうことかぁぁぁぁぁ!Σ(゚ロ゚)o゙」
エンティティ化文字になってたみたいです。
こういうことで、いったんエンティティ解除してから、preg_replace です。
$url = html_entity_decode($url); $url = preg_replace('/^[\s \'\"‘’“”]*(.*?)[\s \'\"‘’“”]*$/u', '\1', $url); $url = htmlentities($url);
どうだぁぁぁぁぁ!Σ(゚ロ゚)o゙
https://popozure.info/pz-linkcard |
ぽぽろん「とれたぁぁぁぁぁぁぁ!Σ(゚ロ゚)o゙」
無事、取れました。
こんなダブルクォートに悩まされるとは…(^-^;
要望いただいています
Pz-HBCからお乗り換えの方から、要望をいただいています。
(文章はこちらで要約したものになっています。)
increment Log さんのところの「GetLinkCode ブックマークレット」を利用して、ショートコードも bm に変更して利用していますが、Pz-LkCに乗り換えたところ、タイトルが表示されない不具合があります。
そこで、今まで使用していた bm は「ショートコードで囲んだ文字列」を「タイトルとして使用」のまま使用して、もうひとつの blogcard は「ショートコードで囲んだ文字列」を「使用しない」で使いたいのです。 ショートコードごとに設定できるようになりませんか! |
という感じ。
「ショートコードで囲んだ文字」をショートコード別に設定…!Σ(゚ロ゚)o゙
ぽぽろん「その発想は無かった!Σ(゚ロ゚)o゙」
自分で設定画面の下の方から、ショートコードの近くまで持ってきておいて、そんなこと考えてもいませんでした(^-^;
確かに、自前取得ができないPz-HBCではブックマークレット使用を推奨していて、Pz-LkCでは自前取得しちゃうのでURLのみ指定を推奨しているわけですが、「過去記事を置き換えないで乗り換えられる」というのは自分が言っていることでした。
この対応はしてみたいのですが、「どのショートコードで入ってきたか」はプラグイン本人からは分からないのです(^-^;
[2015/10/10追記](ショートコードのフックで呼ばれてきたとき、第三パラメータに呼ばれたときのショートコード文字が入っていました。これと見比べるだけでした。)
[2015/10/10削除]そこで、ショートコードごとに呼ばれる関数を用意しておいて、共通で使用するリンクカードを作成する処理を関数化(モジュール化?)しておいて、それぞれ呼べば良いのですが。
本当はちゃんと共通パーツを関数化しておくべきなのですが、出来ていないのが現状。
とりあえず、次回バージョンアップまでに出来るかな…。
[2015/10/10追記](ver1.0.0にて、ショートコード1にのみ囲い文字が有効に出来るように修正。設定は一つのままなので、「タイトルに使用」と「抜粋文に使用」は併用できません。)
コメント