WordPressのデータダウンロード(csv,jsonファイルとしてダウンロード)

WordPressでのダウンロード機能を作成する場合、一般的なPHPの方法は使えず。
template_redirectフックを利用する必要がある。

URLの例 (プラグインのパスは含まないので注意)

	http://localhost/test/wordpress?download=true
	

サンプル

	add_action('template_redirect', 'download_action');
	function download_action() {
		if($_GET['download'] == 'true') {
	
			$lineList = array();
			$lineList[] = '大きな栗の木の下で';
			$lineList[] = 'あなたとゾウムシ';
			$lineList[] = '栗ひろいでしのぎをけずる';
			
			$txt_file = "test.txt";
			$utf8_flg = false; // true:utf8のファイルにする | false:shift-jisファイルにする
			
			
			$buf="";// バッファ
			
			// Shift-jisでダウンロードする
			if(empty($utf8_flg)){
			
				foreach($lineList as $line){
					$buf .= mb_convert_encoding($line."¥r¥n", "SJIS-win", "UTF-8");
				}
			
			}
			else{
				$buf = "¥xEF¥xBB¥xBF"; // utf-8形式のファイルにするため、BOMをセットする。
			
				foreach($lineList as $line){
					$buf .= $line."¥r¥n";
				}
			}
			
			header ("Content-disposition: attachment; filename=" . $txt_file);
			header ("Content-type: application/octet-stream; name={$txt_file}; charset=utf-8");
			print($buf);
			
			exit; 
		}
	}
	


カスタム投稿タイプの作成

カスタム投稿タイプを作成するには、プラグインのソースファイルに設定を記述するのが適切である。

プラグインのソースファイル(test_animal.php)


	// カスタム投稿タイプ
	add_action( 'init', create_custam_post_type1 ));

	/**
	 * カスタム投稿タイプを作成する
	 */
	public function create_custam_post_type1() {
		register_post_type( 'gecko_diary',
			array(
				'labels' => array(
					'name' => __( 'ヤモリ' ),
					'singular_name' => __( 'Gecko' )
				),
				'public' => true,
				'has_archive' => true,
			)
		);
	}
	

プラグインを有効にしてダッシュボードを開くと右側のメニューに新項目が追加されている。
ここから作成したカスタム投稿タイプに投稿できる。

パーマリンク

パーマリンクとはカスタム投稿タイプの投稿を一般へ公開するためのURLである。
パーマリンクは書換え可能である。
パーマリンクを適用するにはパーマリンクの更新を行わなければならない

パーマリンクの更新方法
設定→パーマリンク設定→「変更を保存」ボタン

以上で、パーマリンクにアクセスすると投稿が一般表示される。


WordPressのリダイレクト | wp_redirect


	wp_redirect( 'URL' );
	exit;
	

投稿ページへのリダイレクト

	wp_redirect( admin_url('post.php') );
	exit;
	

リファレンス


コアからフックを探す方法

WordPressでのプラグイン開発ではフック探しが重要である。
コアファイルのソースコードをdo_actionまたはapply_filtersで検索するとフックの元場所が分かる。


カスタム投稿タイプへ独自入力フォームを追加(さらにメタデータとして保存)

プラグインファイル

test_animal.php



カスタム投稿タイプの画面



参考サイト


プラグインディレクトリパスを取得 (URLではない一般OSのパス)


	$plugin_dp = WP_PLUGIN_DIR . '/' . plugin_basename(__DIR__);
	// 出力例→ C:¥xampp¥htdocs¥wordpress1¥wp-content¥plugins¥animal
	


WPクーロン


	/*
	 Plugin Name: テスト・アニマル・プラグイン
	 Plugin URI: http://amaraimusi.sakura.ne.jp/note_prg/wordpress/
	 Description: プラグイン開発のHello Worldです。
	 Version: 1.0
	 Author: kenji uehara
	 Author URI: http://amaraimusi.sakura.ne.jp/
	 License: MIT
	 */
	class TestAnimal {
	
		public function __construct(){
			// WPクーロンが未登録なら登録する
			if ( ! wp_next_scheduled( 'cron_event1') ) {
				wp_schedule_event( time(), 'hourly', 'cron_event1');
			}
			add_action( 'cron_event1', array($this, 'barkCat' ));
			
			// wp_clear_scheduled_hook('cron_event1'); // WPクーロンを登録解除する
		
		}
	
		public function barkCat(){
			error_log('吠えるネコ'); // 一時間に一回、debug.logに出力される
		}
	}
	

クーロンの登録コード(cron_event1)は他のプラグインと重複しないように注意する。
WP-Cronプラグインをインストールするとクーロンの登録状況を容易に調べられる。

参考サイト


SQLを実行する(SELECT以外)

「$wpdb->query」でSQLを実行できる。ただし、SELECT用ではない。
レスポンスは件数を返すのみである。


	$query = "SELECT * FROM wp_posts LIMIT 2";
	$res = $wpdb->query( $query );
	debug($res);// レスポンスは2件
	

実行したSQLを表示する


	// デバッグモードのSQLダンプ準備
	$wpdb->show_errors();
	
	// ★INSERT実行
	$result = $wpdb->insert( $table, $ent_s);
	
	// デバッグモードのSQLダンプ出力
	$wpdb->print_error();
	

カテゴリ名とカテゴリコードを取得するSQL


	SELECT
		term_id AS category_id, 
		name AS category_name,
		slug AS category_code
	FROM
		wp_terms
	WHERE
		term_id = 8
	

投稿IDリストからカテゴリID,カテゴリコード、カテゴリ名を取得するSQL


	SELECT 
		WpTermR.object_id AS post_id,
		WpTermR.term_taxonomy_id AS category_id,
		WpTerm.name AS category_name,
		WpTerm.slug AS category_code
	FROM wp_term_relationships AS WpTermR
	LEFT JOIN wp_terms AS WpTerm
		ON(WpTermR.term_taxonomy_id = WpTerm.term_id)	
	WHERE 
		WpTermR.object_id IN ('100','101','102','103')
		AND term_order = 0
	
「'100','101','102','103'」は投稿者IDリスト