【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~』みたいなところまでカウントしなくて良いからです(後の段落で少し紹介します)。
【参考】basename(phpマニュアル)
https://www.php.net/manual/ja/function.basename.php
【参考】glob(PHP)(phpマニュアル)
https://www.php.net/manual/ja/function.glob.php
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視聴やカテゴリなどが出ます。
SSF楽曲 midiデータ配布ページ
https://ss-freemusic.sounds-stella.jp/midi-distribution/
おまけ(basenameでやってみると?)
最初のほうで出た『basename』について、この方法でもやってみました。globしたあと、foreachでループ回してファイル名を出力。
こんな感じで出ました。こちらのほうが簡単かもですね~。substrより処理回数が減るし、記述もシンプルにできます。
あとがき・まとめ
- globはurlだと出ないので、$_SERVERドキュメントルート ディレクトリから取ったが、substrするときの文字数カウントがめんどくさい
- basenameでファイル名だけ抜いたほうが簡単かも
- ファイル命名規則に記事idを入れておくと、WordPressやmovable typeなどのCMSで、記事ページと連動が出来る
まとめると、こんなところでしょうか。このご時世midiはあんまり使う人がいないかもしれませんが(笑)、特定フォルダのファイル取得に慣れてきたのは良かったです。 そのうち、フラットファイルCMS作ったりとかに使用するかもしれません。
【カテゴリ】- PHP
【タグ】- basename(PHP), glob(PHP), PHP, WordPress