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

更新: 2023/10/27 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作ったりとかに使用するかもしれません。

WordPressサイト制作&リニューアル・機能開発サービス | アトリエSS


【カテゴリ】- PHP・データベースetc
【タグ】- , , ,

関連記事

【超危険】WordPressデータベースリビジョンお掃除
WordPressユーザーが覚えると便利な条件分岐~投稿記事・固定ページ指定して表示/非表示
【LaravelベースのCMS】PYRO CMSのローカルインストール方法や使用感など紹介
WordPress・REST APIのjsonファイルにカスタムフィールドを入れ、タイトル・アイキャッチと共に外部サイトで取得・表示
【WordPressで覚える】PHP「->」(オブジェクト演算子/アロー演算子)・「=>」(ダブルアロー演算子)の違い
【PHPファイル取得でmidiデータ配布サイト】glob関数とWordPress関数で、midiダウンロード&関連記事一覧を作成
WordPress記事一覧ページの『本文からの抜粋』を表示する関数と、その文字数の調整方法をチェックする
【PHPプログラミング】glob関数を使って、特定ディレクトリ内のファイル一覧取得や、出力を行う方法
WordPressの記事IDで判定して転送~PHP・headerとget_the_IDで対応、the_IDとの挙動の違いも
【WordPress組み込み関数】is_home()とis_front_page()って同じ?→似てますが、厳密には挙動が異なります
【WP記事取得クエリ・プラグイン無し】お知らせなどに使える、ショートコードで特定カテゴリ記事を表示プログラム
【PHP・url転送】$_SERVER(サーバー変数)のHTTP_HOSTやREQUEST_URIを使って、新しいドメインにリダイレクトさせる方法