<?php
class links {
public static function display( $arg ){
echo $arg;
if( !preg_match_all( "/href=\"([^\"]+)\"/iu", $arg, $matches ) ) return;
$links = array( '<h4>Links</h4>', '<ul>' );
foreach( $matches[1] as $href ) $links[] = "\t<li>{$href}</li>";
$links[] = '</ul>';
echo implode( "\n", $links );
}
}
add_filter( 'the_content', array( 'links', 'display' ) );
?>
コンテンツ表示時に記事の中にあるhrefタグを抜き出し、記事表示後にリンクの一覧を出力するサンプル。
add_filter(フックするところ, array( ‘クラス’, ‘Function’ ),プライオリティ);
まだ正規表現が読めないので・・T-T
でも !preg_match_allのところでひとつもherfタグがなければreturnというということ。
int preg_match_all ( string pattern, string subject, array &matches [, int flags [, int offset]] )
subject を検索し、 pattern に指定した正規表現にマッチした すべての文字列を、flags で指定した 順番で、matches に代入します。
正規表現にマッチすると、そのマッチした文字列の後から 検索が続行されます。
マッチしたものを$matchesに代入。
$matchesの中身
Array
(
[0] Array
(
[0] href="http://www.aaaa.co.jp"
[1] href="http://www.bbbb.co.jp"
)
[1] Array
(
[0] http://www.aaaa.co.jp
[1] http://www.bbbb.co.jp
)
)
$link[]を整形
implode( “\n”, $links );で合体
って、implodeって初めて知った。
Arrayを合体させるっぽい。その間は\nで繋ぐという感じかな。
string implode ( string glue, array pieces )
すべての配列要素の順序を変えずに、各要素間に
glue文字列をはさんで 1 つの文字列にして返します。
で、ちょいと改造
class links {
var $civic;
// コンストラクタ(インスタンス化された時に動く)
// Class名と同じFunction名
function links(){
$this->civic = 'シーフ';
}
function display( $arg ){
echo $arg;
if( !preg_match_all( "/href=\"([^\"]+)\"/iu", $arg, $matches ) ) return;
$links = array( '<h4>Links</h4>', '<ul>' );
foreach( $matches[1] as $href ) $links[] = "\t<li>{$href}</li>";
$links[] = '</ul>';
echo implode( $this->civic."\n", $links );
}
}
// インスタンス化
$links = new links();
add_filter( 'the_content', array( $links, 'display' ),10 );
?>

