icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【PHPファイル取得でmidiデータ配布サイト】glob関数とWordPress関数で、midiダウンロード&関連記事一覧を作成

更新: 2024/02/10 2728文字

今回は、以前当コラムに書いた『glob関数を使って、特定ディレクトリ内のファイル一覧取得や、出力~』というものの続きで、実際に作ってみます。内容は、『管理人運営の著作権フリー曲サイトSSFでmidiデータ配布・ファイル命名規則により、フォルダにアップしただけで関連記事やフィールドが出力できる』というものです。 あんまり使う人はいないと思いますが(笑)早速、やり方を見ていってみましょう。

なお、substrで文字数カウントして抜く方法と、basenameでファイル名を取る方法の2種類があります(前者でやりましたが、後者が簡単だと思います)。

下準備~固定ページ準備・取得プログラム作成・アップするファイルの命名規則やパス文字数チェック

まずは配布用の固定ページを作り、記事idを押さえておく

新しくカスタム投稿タイプとかを作っても良いんですけど、メインの記事ループ(posttype=post)に影響しないよう、固定ページ(page)で配布用のページを用意しました。この部分に諸注意やその他いろいろ記載しておきます。なお、idを押さえておき『投稿idで判定して、取得プログラムを読み込む』という流れにしました。

で、テーマの固定ページ用プログラム部分です(midi-list.phpはテーマ内にアップしました)。ここでidを指定して(is_page($id))、get_template_part(取得プログラムはテーマディレクトリにアップ)で読み込むという感じです。重複しない値なら、スラッグとかで判定しても良いかもしれません。管理人は個別の値が割り当てられるということで、投稿id判定を使うことが多いです。

midiデータをアップロードするフォルダを作り、idなど記事が取れるように、ファイル命名規則を決める

あとは、wp-content内だけど、画像やmp3などごちゃごちゃ入っているので、midi配布専用のフォルダを用意。

上記のフォルダにpc内にあったSSF楽曲のmidiをアップしていくんですけど、ファイル名に5桁の数値が入っています。これはidで、その曲に関連した情報フィールド・記事・mp3視聴などが取れるようになります。なぜ5桁かというと、今のペースでアップしていって確実にオーバーフローしないからです(mp3,画像,リビジョン,記事で、1曲アップで使うidが4つ)。

midiをアップ後globしてみて、ファイルパスの文字数を調べる(basenameのときはいらないかも)

で、midiをアップした後globし、その配列をvar_dumpしてみたところです。こんな感じで配列にmidiデータのパスが入ってます。substr(冒頭から5文字抜くとか)するために文字数をチェックしていたんですけど、substrじゃなくても良いかもしれません(今回のはsubstrで作ったけど)。

basenameを使うと、ファイル名だけ返すみたいなのもできるので、『/home/users~』みたいなところまでカウントしなくて良いからです(後の段落で少し紹介します)。

glob関数とWordPress関数で、フォルダにアップしたmidiダウンロード&関連記事一覧を作成するプログラム

プログラムはこんな感じになりました。まず、 globについては単純にurlを書いても出ないので(array(0) { }が戻ってくる)、$_SERVERで取っています。 countは、『現在〇〇個のファイルがアップされている』的な表示に使用。

あとはforeachでループ回して、substrでバイト数指定しid,ファイルパス,ファイル名を抜いていきます。idさえ取れれば、『get_the_title(タイトル), get_permalink(詳細記事へのリンク),get_the_category(カテゴリ),get_post_meta(カスタムフィールド)』などのWP組み込み関数で、必要情報はほぼ取れます。

なお、FTPでmidiデータをアップしただけで、これらの情報は自動的に取得・表示されるのでお手軽です。

表示例(SSFサイト)

SSFサイトでの表示例です。上のほうは固定ページのエディタで書いた説明みたいなのが出ます。テーマの『content』の部分ですかね。

下のほうにスクロールすると、こんな感じでダウンロードリンクや関連記事・mp3視聴やカテゴリなどが出ます。

おまけ(basenameでやってみると?)

最初のほうで出た『basename』について、この方法でもやってみました。globしたあと、foreachでループ回してファイル名を出力。

こんな感じで出ました。こちらのほうが簡単かもですね~。substrより処理回数が減るし、記述もシンプルにできます。

あとがき・まとめ

  • globはurlだと出ないので、$_SERVERドキュメントルート ディレクトリから取ったが、substrするときの文字数カウントがめんどくさい
  • basenameでファイル名だけ抜いたほうが簡単かも
  • ファイル命名規則に記事idを入れておくと、WordPressやmovable typeなどのCMSで、記事ページと連動が出来る

まとめると、こんなところでしょうか。このご時世midiはあんまり使う人がいないかもしれませんが(笑)、特定フォルダのファイル取得に慣れてきたのは良かったです。 そのうち、フラットファイルCMS作ったりとかに使用するかもしれません。


【カテゴリ】- PHP
【タグ】- , , ,

関連記事