MENU

WordPressにて、メディアアップローダーからCSVファイルをアップして、自動的にテーブルを作成するショートコードをテキストボックスに自動挿入!

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”であれば、同様にキャプションを取得
・で、ショートコードの書式にしたがって出力
てな感じ。

面倒だったのはフックポイントを探すところだけ(とは言いつつ、探索時間半日くらいかかりました^^ゞ)で、それがわかればどうにかこうにかできました、ってところです。