定期的にファイルをサーバーにアップロードして、そのファイルに対するリンクを投稿内に追記しているのですが、変更する記事の数が何十個もあって作業が面倒なので、ショートコードを使って自動化してみました。
※目次をクリックすると目次の下部にコンテンツが表示されます。
タイトル 投稿内のカスタムフィールド
東京都の地域情報 県名:東京都
神奈川県の地域情報 県名:神奈川県
: :
②サーバーのディレクトリとファイル名の仕様
ディレクトリ
wp-content/uploads/table/東京都
ファイル名
20131211東京都.html
20140410東京都.html
20140111東京都.html
:
③ショートコードの仕様
各投稿のカスタムフィールドで定義された値(例:東京都)のディレクトリ内のファイル名を取得し、そのファイルに対するリンクをその投稿内に挿入する。
テーマ内のfunctions.phpに下記ショートコードを定義します。
function ctm_fld() { mb_regex_encoding("UTF-8"); $ctm_fld = get_post_meta(get_the_ID() , '県名' ,true); $path = "wp-content/uploads/table/".$ctm_fld; $ary = array(); if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { if (mb_ereg_match(".*$ctm_fld.*",$file)) { $day = substr($file, 0, 8); array_push($ary, array('day' => $day, 'file' => $file)); } } closedir($handle); foreach($ary as $key => $row){ $day_ary[$key] = $row['day']; } array_multisort($day_ary,SORT_ASC,SORT_NUMERIC,$ary); } foreach($ary as $key => $row){ $file_list .= "<a href=\"".$path."/".$row['file']."\" target=\"chart\">・".substr($row['file'],0,4)."年".substr($row['file'],4,2)."月末</a> "; } return $file_list; } add_shortcode('CtmFld', 'ctm_fld');
2)ショートコードの説明
①投稿内のカスタムフィールドで設定された値を取得
“県名”というカスタムフィールドで指定された値を取得します。
下記関数を使用します。
$ctm_fld = get_post_meta(get_the_ID() , ‘県名’ ,true);
②日本語の文字列検索
文字コードとしてUTF-8を指定し、ファイル名に指定した県名を含むファイルを抽出します。
mb_regex_encoding(“UTF-8”);
$ctm_fld = get_post_meta(get_the_ID() , ‘県名’ ,true);
:
if (mb_ereg_match(“.*$ctm_fld.*”,$file)) {
③ディレクトリ内のファイル一覧を取得
$path = “wp-content/uploads/table/”.$ctm_fld;
:
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
:
④substr関数でファイル名から日付部分を抽出
$day = substr($file, 0, 8);
⑤日付とファイル名を項目名としてハッシュの配列を作成
array_push($ary, array(‘day’ => $day, ‘file’ => $file));
⑥上記配列をarray_multisort関数を使って日付の順に並び替え
foreach($ary as $key => $row){
$day_ary[$key] = $row[‘day’];
}
array_multisort($day_ary,SORT_ASC,SORT_NUMERIC,$ary);
⑦配列内のファイルに対するリンクを作成
下記仕様のリンクを作成します。
<a href=”wp-content/uploads/table/東京都/20130810東京都.html” target=”chart”>・2013年08月末</a> <a・・・
foreach($ary as $key => $row){
$file_list .= “<a href=\””.$path.”/”.$row[‘file’].”\” target=\”chart\”>・”.substr($row[‘file’],0,4).”年”.substr($row[‘file’],4,2).”月末</a> ”;
}
⑧ショートコードを定義
add_shortcode(‘CtmFld’, ‘ctm_fld’);
投稿内に[CtmFld]を記述すると、その記述した部分に該当するファイルのリンクが挿入されます。