ショートコードを使ってディレクトリ内のファイル名を取得し、投稿内にリンクを挿入

定期的にファイルをサーバーにアップロードして、そのファイルに対するリンクを投稿内に追記しているのですが、変更する記事の数が何十個もあって作業が面倒なので、ショートコードを使って自動化してみました。

(1)仕様


 
①投稿の仕様
 
タイトル       投稿内のカスタムフィールド
東京都の地域情報   県名:東京都
神奈川県の地域情報  県名:神奈川県
 :          :
 
②サーバーのディレクトリとファイル名の仕様
 
ディレクトリ
wp-content/uploads/table/東京都
 
ファイル名
20131211東京都.html
20140410東京都.html
20140111東京都.html
 :
 
③ショートコードの仕様
 
各投稿のカスタムフィールドで定義された値(例:東京都)のディレクトリ内のファイル名を取得し、そのファイルに対するリンクをその投稿内に挿入する。
 

(2)ショートコードを定義


 
1)ショートコードの内容
 
テーマ内の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]を記述すると、その記述した部分に該当するファイルのリンクが挿入されます。

関連記事の目次
VPSサーバーでスナップショットを取得
~障害に備え、リカバリーポイントを作成。
VPSサーバーにログインして、設定内容を確認
~グローバルIPアドレス確認、SSHキーを作成。
VPSサーバーにSSHでログイン
~Tera Term、SSH、公開鍵認証方式
yumコマンドで最新のパッケージにアップデート
~全パッケージを最新にアップデート
Apacheのインストール
~yumコマンドでApacheインストール、iptablesでファイアウォールの設定
PHPとMySQLをインストール
~yumコマンドでPHP、MySQLインストール
WinSCPを使ってWordPressをアップロード
~WinSCPをクライアントPCにインストール、ファイルアップロード方法
WordPressをインストール
~MySQLでWordPress用データベース作成、wp-config.phpファイルの設定
CentOSのファイアウォール設定
~iptablesを使ってネットワークフィルタリング設定を一から行う
OpenSSHの設定をよりセキュアに
~ログイン制限、ポート変更、認証方式
ApacheでTCPのTraceメソッドを無効にする
~Apacheの設定変更、Telnetで動作確認
ヘッダーにApacheバージョンが表示されないようにする
~Apacheの設定変更、Telnetで動作確認
Apacheでディレクトリ内一覧表示を無効にする
~autoindex_moduleのロードを無効にする
セキュリティを考慮し、MySQLの匿名ユーザーにパスワードを設定、または削除
~MySQLの匿名ユーザーにパスワードを設定、または削除
PHPのバージョンが表示されないようにする
~php.iniの設定変更
WordPressディレクトリのパーミッションをセキュアに
~WordPress用ディレクトリの所有グループ、ユーザー、パーミッション設定
パーマリンク設定時のApache設定
~WordPressパーマリンクの設定、Apache .htaccessの設定
WordPressテーマの選定
~テーマ追加の特徴フィルターの項目、テンプレートキング
WordPressで画像のアップロード、サイズ調整、リンクを設定
~アップロード画像の画像サイズ、サムネイル、画像編集、リンク設定
更新可能なRPMパッケージのリストをメールで送信する
~yumコマンド、Bashスクリプト、Cron
Linuxでディスク使用量が多いディレクトリを調べる方法(1)
~du --max-depth
Linuxでディスク使用量が多いディレクトリを調べる方法(2)
~duコマンド、sortコマンド
WordPressデータベースのバックアップとリストア
~コマンドラインでバックアップ、リストア
WordPressのバージョンアップと旧バージョンへの戻し
~データベースとディレクトリのバックアップ、リストア
BashスクリプトでWordPressデータベースを自動バックアップ
~MySQLデータベースをBash、Cronを使って自動バックアップ、メール通知
BashスクリプトでDos攻撃など大量アクセスのログを検知
~Apacheアクセスログ、Dos、Cron、メール通知
テーマ作成
 
ブートストラップ3を使って自作テーマ作成
~Bootstrap3、自作テーマ作成、TwentyFourteen
Bootstrapのフリーのテーマを使ってデザインを簡単にカスタマイズ
~Bootstrap3のスタイルをカスタマイズ
 
WordPresssショートコード
 
簡単なショートコードを作ってみる
~ショートコードの作り方
ショートコードを使って関連記事のリンクを自動で挿入
~ショートコードの簡単なサンプル
ショートコードを使ってディレクトリ内のファイル名を取得し、投稿内にリンクを挿入
~カスタムフィールド利用、PHPで日本語文字列検索などのコーディング
 
AJAX、AngularJSなどその他応用
 
WordPress投稿内でAngularJSを使用
~AngularJS、Bootstrap、アコーディオン
Bootstrap3で作成したナビゲーションメニューをAngularJSに変更
~AngularJS、Bootstrap、自作テーマheder.php
WordPressでAngularJSを使ったGoogleマップを使えるようにする
~AngularJSを使って投稿内にGoogleマップ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です