リンクをカード形式で表示するWordPressプラグイン「Pz-LinkCard」を公式プラグインディレクトリにて公開中です。
このプラグインは何?インストールはどこから?
リンクをカード形式で表示するWordPressプラグインです。
「テキストでのリンクって味気ないなぁ」とか思っていたら、ぜひお試しください。
Pz-LinkCardの使い方やインストール方法をまとめたページを用意しています。
ちょっと興味がありましたらどうぞご覧ください。
変更点など
なんかもう、直しすぎて、どこ直したんだか…。
自分であまり使っていない設定などは検証が足りていないかも知れません。
ご意見やご報告など、コメントやツイッター(@popozure)などでいただけるとありがたいです。
プログラムのつくりを見直しました
ショートコードの実行部分とカード作成部分とキャッシュ部分とかをようやっと分けました。
これによって、キャッシュを削除せず、更新だけできるようになりました。
あれこれサブルーチン化とかをして、ようやっとプログラムっぽくなってきた気がします(^-^;
URLの判定方法を変更
URLが空欄だったときなど、URLじゃない文字が入っていても処理を通っていたので、早めに抜けるようにしました。
「http://」と「https://」以外は無視するようにするといいような気もするのですが、場合によっては色んなプロトコルにリンクカードとして使って、テキストとかは自分で設定する場合もあるかと思うので、今のところ制限していません。
ショートコードに囲み文字の仕様変更
「ショートコードに囲まれた文字列」を「使用しない」「タイトルに使用」「抜粋文に使用」という設定がありますが、1番目のショートコードにのみ適用されるようになりました。
Pz-HBCでは外部リンクのタイトルや抜粋文を取ってこれなかったので、カードのレイアウトを変更したい方は、ブックマークレットを併用していたと思います。
Pz-LkCでは自前取得できるようになったものの、同一の記事に同一ショートコードが [Shortcode xxx]~[/Shortcode] というように閉じがあったり、[Shortcode xxx] と単体で使ったりすると、綺麗に表示されませんでした。
1個目のショートコードを「bm」にして、「タイトルに使う」に設定。
2個目を「blogcard」にする、などすることで、別のショートコードになるので、閉じありとなしが混在できるようになります。
判定するタイミングも変えてしまったので、Pz-HBCとは挙動が違うかも知れません。
あまりに変だったら対応しますが、外部サイトの情報は取得できない Pz-HBC と違うので、同じには出来ないかも知れません。
ショートコード3を解放しました
内部的にはショートコード3が使えるように変更しました。
内部的には4まで設定されているので、要望があれば解放できます。
文字エンコードまわりを修正しました
最初は文字セットを考えていなくて、シフトJISのサイトとかが化け化け。(NTT-Xストアなんですけどね(^-^;)
通信業界最先端のNTTさん、UTF-8にはしないのでしょうか…(^-^;
NTTグループの安心オンラインストア NTT-X Store
mb_convert_encoding() で自動変換してみたものの、そのサイトは変換されず…サイトそのものは Shift_JIS なのに、広告が utf-8 という状態で、自動変換できなかったようです(^-^;
とりあえず、文字セットの変換は落着していた気がしていたのですが、ver0.1.4を公開した後、英語のページで記事中に「’s」(アポストロフィーエス)が化けていたのを発見。
TweetDeck98198 Posts15939 Shares677 Users30636 PocketsTweetDeckhttps://tweetdeck.twitter.comTweetDeck is your personal browser for staying in touch with what’s happening now.
そんなわけで、文字セットの判断方法を修正しました。
metaタグから文字コードを取るのが一番確実っぽいのですが、古いサイトだとそもそもcharsetとかちゃんと設定されていない場合もあるので、判定する方向でやりたいと考えていました。
(たとえ指定が間違っていたとしても、 charset 指定を信用するというのが一番の正解のような気はするのですが…(^-^;)
とりあえず一通りコンバートしてみて、一番いいのを見つけるやり方にしてみました。
ちなみに変換先の charset は、UTF-8 でほぼ間違え無しだと思うのですが、get_bloginfo(‘charset’) で取得したものを使用しています。
例えば $str が ‘UTF-8’ だった場合、mb_convert_encoding($str, ‘UTF-8’, ‘UTF-8’) の結果は、元の $str と同じになるはずです。
これでも先ほどの NTT-Xストア は正しく判別できなかったので、今までどおりの判定方法と組み合わせています。
キャッシュまわりを見直しました
とりあえず、少しだけ関数化して、取得と更新が独立して行えるようになりました。
このために、管理画面から「今すぐキャッシュ更新」が出来るようになりました。
DBの読み書きまわりも手を入れたのですが、なかなか難しい(^-^;
返りは Class で返ってくるけど、新規のときに stdClass を作って適当に放り込もうとしたら、array ほど手軽には扱えないようですね(^-^;
とりあえず、DB更新まわりはもうちょっときれいに直したいです(^-^;
ソーシャルカウント部分は手つかず
ソーシャルカウントを取得する部分は今回手つかずです。
最終的にはリンクカードを作成するときには一切ソーシャルカウントは作らず、スケジュールだけするようにしたいです。
閲覧者がページを表示するタイミングとは別に、裏でソーシャルカウントを取得することで、「初回の表示が数秒かかる」というのも改善したいと思っています。
タイトルが取得できていない場合にURLを表示
タイトルが取得できない場合、URLを表示するのですが、設定するタイミングがちょっとおかしかったので修正しました。
特に Pz-HBC のときにはブックマークレット等を使用して、「ショートコードで囲まれた文字列」を「タイトルに使用」で使っていたけど、Pz-LkC に乗り換えたので、「使用しない」にした場合とかに、description パラメータはあるのにタイトルの指定が無くて空欄→URL という感じになっていました。
なお、Pz-LkC では、タイトルと抜粋文を取得して、そのままキャッシュしておくので、タイトルや抜粋文を指定しないのを推奨します。
ただし、タイトルや抜粋文も指定しておくと、他プラグインへ乗り換えるときにスムーズかも知れません。
キャッシュ管理がそれっぽくなりました
キャッシュ管理画面がそれっぽくなってきました。
というか、今回、ほとんどここを修正してました。
- 今回、phpやWordPress向けプログラムの経験不足を特に感じました。(毎回感じていますが…(^-^;)
- 画面が凄い「WordPressっぽい」です。なぜなら、WordPressのCSSとかclassに乗っかってるからです…。今後のWordPressの仕様変更により、画面が乱れたり、動作がおかしくなる可能性があります。
- 見栄えを考慮して、URLとタイトルの列は合わせて2行書きで表示されます。
- 一覧にインラインメニューを追加。
- 1個だけ削除する場合にも一括処理を選択していましたが、インラインメニューから単体に対して「編集」「再取得」「削除」ができるようになりました!
- 「編集」を押すと、取得済のタイトルと抜粋文を修正できます。既に「リンク切れだけど、記録としてどうしても残したい」とか、「相手がブログじゃないから、抜粋文が取れない」といった場合に、手入力できます。
- 「削除」を押すと、キャッシュ削除できます。どこの記事にも使用されていなくて、要らない場合に削除できます。
- 内部リンクのURLにリンクを設定しました。(外部リンクの場合、リファラーにあれこれパラメータが乗ってしまうので設定していません。)
- バッチ選択に「今すぐ再取得してキャッシュしなおす」を追加しました。過去バージョンで抜粋文が取得できなかったものにチェックを入れて、更新できます。
- 「すべてのドメイン」と書かれているところを押すと、ドメインの一覧が表示され、抽出が行えます。
- ページング機能(ページャー)が着きました。1ページ10件表示されます。(今までの無尽蔵に表示されていた方が見やすいときがあります。件数を変更できるように検討します。)
- 項目を押すたびに、降順/昇順が入れ替わります。ソーシャルカウントの項目にもソート機能が付きました。
(追加)変更点など
ver1.0.0→1.0.1
- 「内部IDに0が入る不具合を修正」
カードが表示されるたびに、内部では通番が振られています。
リンク先が 404 エラー のまま取得できているものをカード管理を編集して、その後、記事を表示した場合にIDが0になってしまう不具合がありました。
この不具合により、同一URLのキャッシュが作成されている場合がありますが、特に問題は無く、気になる場合は管理画面から削除してください。
(追加)ver1.0.1→ver1.0.2
- プラグインをバージョンアップさせるたび、標準設定が「チェックを付ける」になっているチェック項目が、標準設定で上書きされてしまう不具合を修正。
- キャッシュ取得、キャッシュ更新(上書き)、キャッシュ削除を関数化。
- 「Pzカード管理」画面の動作改善。
- キャッシュの読み書きと削除を関数化した処理を使用するように修正。
- 一括処理「SNS更新」をフラグを立てるだけでなく、その場で取得するように修正。
- 編集したときに、内部IDが0になってしまう現象が直ってなかったので、編集にかかる処理を見直し、修正。
- ソーシャルカウントのチェックを外しても、表示されていたのを修正。
- ソーシャルカウントを表示する設定をしている場合、すでにカウントを取得していると、個別の表示のチェックを外しても表示がされていたのを修正しました。
たとえば、ツイート数が「5」と取得されているときに、「ソーシャルカウントは表示する」になっているけど、「ツイッター」のチェックを外した場合、取得はし直さないものの「5 tweets」と表示されていました。
- ソーシャルカウントを表示する設定をしている場合、すでにカウントを取得していると、個別の表示のチェックを外しても表示がされていたのを修正しました。
その他
ブックマークレットの使用など
Pz-HBC では、自力で外部サイトのタイトルや抜粋文を取得できなかったので、タイトルや抜粋文を持ってくるブックマークレットの使用を推奨させていただいていました。
Pz-LkC では、登録時(初回表示時)に、リンク先サイトからタイトルと抜粋文を取ってきてキャッシュしてしまうので、ブックマークレットを使う必要がありません。
ただし、今後、WordPressを移転した場合に、キャッシュデータが引き継げない場合、取得したテキストは無くなってしまいます。
また、今後、他のプラグインに乗り換えた場合に、ショートコードとともにタイトルや抜粋文があった方が便利な場合があります。
そんなわけで、ブックマークレットを使用していても、Pz-LkC では、「ショートコードに囲まれた文字列」を「使用しない」としておくのが良いかと思います。
スケジュールしたい
wp-cronという疑似スケジュールがあるのですが、「ソーシャルカウントの取得」など、時間のかかるものはスケジュールだけしておいて、閲覧と関係ないタイミングで取得しておく、という仕組みにしたいです。
キャッシュ管理にDBを使うことの不安と安心
「キャッシュ管理」=「Cache manager」。ファイル名は「pz-linkcard-cacheman.php」。キャッシュマンって呼んでます。
DBを使うことそのものはそんなにストレス無いのですが、やはりインジェクションとか怖いです。
一応、「wpdbは1つのテーブルしか扱えない」といった制限があるので、wpdbクラスでアクセスしている限り、ある程度てきとうにSQL発行しても大丈夫そうではあるのですが(^-^;
なんか脆弱性があったら、こっそり教えて貰えると嬉しいです(^-^;
バージョンとか
当初に「ここまでは作らないと!Σ(゚ロ゚)o゙」とか思っていたところまでようやっと作れた気がします。
そんな思いがあって、バージョンもメジャーバージョンを上げて、「0.1.4」から「1.0.0」になりました。
(機能が一部似ている Pz-HBC のバージョンが 1.2.x とかで、まぎらわしいので、Pz-LkC のバージョンは無駄に 2.x.x にあげちゃおうかとも迷っています。)
管理画面、知識量が絶対的に足りてなくて、細かいところが気になりますが(^-^;
とりあえず、タイトルと抜粋文が上手く取れていない場合など、「編集」できる機能は必須だと考えていたので、ここまで出来て良かったです(^-^;
では(^-^)o
コメント
ショートコード2や3で別のデザインを使いたいのですが、そういった設定は可能でしょうか?
例えば、同じURLへのブログカードを、ショートコード1は大きいカード、ショートコード2では小さいカードというように違う見た目で使いたいと思っています。
はるさん、ご利用&コメントありがとうございます。
ショートコードごとにデザインを分けたり、外部リンクと内部リンクでデザインを分ける機能は残念ながらありません。
分けられる事でデザインの幅は増えると思うのですが仕組みが複雑になってしまうため、機能追加するのは難しいと考えています。