ブログテーマを「Simplicity2」から「Luxeritas」に変更したら、ブログカードが上手く動かなかったのでfunctions.phpを編集しました
タイトルにやったことをぶち込みすぎた感ありますね…
テーマをSimplicity2からLuxeritasに変更したら、何故かブログカードが上手く動かない…!という現象が起こりました。調べてみたら意外にも原因は簡単で、Simplicity2では記事内に<a href="https://prfac.com/" target="_blank">https://prfac.com/</a>
と記載しても動くのですが、Luxeritasではdata-blogcard="1"
が必要みたいで、同じ記載方法だと動かないようでした。
data-blogcard="1"
を追加すればいいけど、考えるの面倒くさいので<a href="https://prfac.com/" target="_blank">https://prfac.com/</a>
のアンカータグを削除すればええやん!?天才!!という思考の元、書いたソースコードは以下になります(コメントは削除して貰ってかまいません)。
function anchor_tag_delete($the_content) {
global $post;
preg_match_all("|<a href=\"(.*?)\".*?>(.*?)</a>|mis",$post->post_content,$matches);
//var_dump($matches);
$matches_count=count($matches[0]);
for ($i=0; $i<$matches_count; $i++){
$tag=$matches[0][$i]; // <a href="https://prfac.com/" target="_blank">Pr factory</a>
$url=$matches[1][$i]; // https://prfac.com/
$txt=$matches[2][$i]; // Pr factory
if ($url===$txt && strpos($tag,'blogcard')===false){
$the_content = str_replace($tag, $url, $the_content);
}
}
return $the_content;
}
add_filter('the_content', 'anchor_tag_delete', 1);
解説的なの
今回やりたい内容としては<a href="https://prfac.com/" target="_blank">https://prfac.com/</a>
をhttps://prfac.com/
にしたい。という事なので、書くコードは「各コンテンツのURLを確認。アンカータグの“href”と“テキスト”が一致していたらアンカータグを削除する」ということになります。
ではまず「各コンテンツ」の内容を取得する必要があります。
function anchor_tag_delete($the_content) {
}
add_filter('the_content', 'anchor_tag_delete', 1);
グローバル変数を使う為の宣言をします。
global $post;
マッチングでアンカータグを取得してきます。
preg_match_all("|<a href=\"(.*?)\".*?>(.*?)</a>|mis",$post->post_content,$matches);
マッチングしたアンカータグ達を確認のために一覧として表示させたいなー、って時はvar_dumpを記載すると確認できます。
var_dump($matches);
以下のような感じで表示されます(本番反映時には邪魔なのでコメントアウトさせて下さい)。
array(3) {
[0]=>
array(4) {
[0]=>
string(157) "<a href="http://twpf.jp/micelle9" title="五十嵐みせる(@micelle9)のプロフィール - ツイフィール" target="_blank">http://twpf.jp/micelle9</a>"
[1]=>
string(82) "<a href="https://twitter.com/micelle9/status/514780504537575424">2014, 9月 24</a>"
[2]=>
string(63) "<a href="http://t.co/Xdv6fNDkRv">pic.twitter.com/Xdv6fNDkRv</a>"
[3]=>
string(83) "<a href="https://twitter.com/micelle9/status/525672210115985409">2014, 10月 24</a>"
}
[1]=>
array(4) {
[0]=>
string(23) "http://twpf.jp/micelle9"
[1]=>
string(54) "https://twitter.com/micelle9/status/514780504537575424"
[2]=>
string(22) "http://t.co/Xdv6fNDkRv"
[3]=>
string(54) "https://twitter.com/micelle9/status/525672210115985409"
}
[2]=>
array(4) {
[0]=>
string(23) "http://twpf.jp/micelle9"
[1]=>
string(13) "2014, 9月 24"
[2]=>
string(26) "pic.twitter.com/Xdv6fNDkRv"
[3]=>
string(14) "2014, 10月 24"
}
}
アンカータグの数($matches[0]の数)をカウントします。
$matches_count=count($matches[0]);
アンカータグの数だけfor()でぶん回します。
for ($i=0; $i<$matches_count; $i++){
}
for()でぶん回してるアンカータグ、URL、テキストを変数に格納します(コメントについては削除して貰ってかまいません)。
$tag=$matches[0][$i]; // <a href="https://prfac.com/" target="_blank">Pr factory</a>
$url=$matches[1][$i]; // https://prfac.com/
$txt=$matches[2][$i]; // Pr factory
ifでURLとテキストが一致したとき、アンカータグの内容をURlに置換します(ただしアンカータグに“blogcard”の記載があったら除外します)。
if ($url===$txt && strpos($tag,'blogcard')===false){
$the_content = str_replace($tag, $url, $the_content);
}
そんでそれらをコンテンツへ返します。
return $the_content;
たぶん、どのテンプレートでも使えるかと思います。
ディスカッション
コメント一覧
まだ、コメントがありません