CSVファイルをアップして、自動的にテーブルをつくるプラグインが欲しいなぁと思って検索したら、あっと云う間に見つかりました。
» CSVファイルのデータからテーブルを表示させるショートコード | Simple Colors
素晴らしい。Simple Colorsさん、素敵です。
しかしこれだと、アップしたファイルのURLをコピーして、エントリー画面にてテキストボックスにペーストして、それを元にショートコードを作成するという流れとなり、クライアント様にこのショートコードを入力させるのはかなりハードルが高そうなので、自動で投稿に挿入するように機能を追加してみました。
function table_shortcode_send_to_editor ($html) { if ( isset($_POST['send']) ) { $keys = array_keys($_POST['send']); $send_id = (int) array_shift($keys); if ( isset($send_id) ) { $url = wp_get_attachment_url($send_id); $pathinfo = pathinfo( strtolower($url) ); if ( $pathinfo['extension'] == 'csv' ) { $attachment = stripslashes_deep( $_POST['attachments'][$send_id] ); $caption = ''; if ( isset($attachment['post_excerpt']) ) $caption = $attachment['post_excerpt']; } return '[csv2table th="both" src="' . $url . '" caption="'. $caption. '"]'; } } return $html; } add_filter( 'media_send_to_editor', 'table_shortcode_send_to_editor' );
Simple Colorsさんの作ったショートコードのスクリプトに続けて、上のコードを追加するだけ。
(ボクの場合はプラグイン化しましたけど、functions.phpにダラダラ書いてもOK)
この後、
こんな感じでCSVファイルをアップロード(またはメディアライブラリから選択)して、「投稿に挿入」ボタンを押すと、
こんな感じで、ショートコードが挿入されます。
※ただしアップしたファイルの拡張子が「.csv」の場合だけ。
仕組みとしては、メディアを投稿に挿入するときのmedia_send_to_editorにフックを掛けて、
・ファイルのアタッチメントIDからファイルのURLを取得
・URLの拡張子が“csv”であれば、同様にキャプションを取得
・で、ショートコードの書式にしたがって出力
てな感じ。
面倒だったのはフックポイントを探すところだけ(とは言いつつ、探索時間半日くらいかかりました^^ゞ)で、それがわかればどうにかこうにかできました、ってところです。