WordPressの投稿一覧画面でチェックした記事のみをCSVファイルでエクスポート(ダウンロード)する

すべての記事をCSVファイルでエクスポートする方法はいろいろ見つけたんですが、チェックした記事のみをエクスポートする方法が見つからなかったので、参考サイトを元に改造してみました。

参考にしたのはこちら。
How To Export Posts To CSV In WordPress

CSVエクスポートボタン設置

// ボタン追加
function admin_post_list_add_export_button($which) {
	global $typenow;
	if('post' === $typenow && 'top' === $which) { ?>
		<input type="submit" name="export_posts" class="button button-primary" value="<?php _e('Export Posts'); ?>" />
	<?php }
}
add_action('manage_posts_extra_tablenav', 'admin_post_list_add_export_button', 20, 1);

ボタンクリックでCSVファイルエクスポート

function func_export_posts() {
	if(isset($_GET['export_posts'])) {
		//チェックボックスのvalueを取得して「,」で区切った文字列としてに代入
		if(isset($_GET['post']) && is_array($_GET['post'])) {
			$post = implode(',', $_GET['post']);
		}
	
		//includeでチェックが入った記事のみを対象とする
		$arg = array(
			'post_type' => 'post',
			'post_status' => 'publish',
			'posts_per_page' => -1,
			'include' => $post
		);

		global $post;
		$arr_post = get_posts($arg);
		if($arr_post) {
			header('Content-type: text/csv');
			header('Content-Disposition: attachment; filename="posts'.date('YmdHms').'.csv"');
			header('Pragma: no-cache');
			header('Expires: 0');

			$file = fopen('php://output', 'w');

			fputcsv($file, array('タイトル', 'URL', 'カテゴリー', '日付'));

			foreach($arr_post as $post) {
					setup_postdata($post);

					//カテゴリー
					$categories = get_the_category();
					$cats = array();
					if(!empty($categories)) {
						foreach($categories as $category) {
							$cats[] = $category->name;
						}
					}

					fputcsv($file, array(get_the_title(), get_the_permalink(), implode(",", $cats), get_the_time("Y/m/d")));
				}

				exit();
		}
	}
}
add_action('init', 'func_export_posts');

軽い解説

  • 3〜6行目
    チェックが入ったチェックボックスの value(postIDが値)を取得しています。それを implode でカンマ区切りの文字列に変換し $post に代入しました。
  • 8〜14行目
    get_posts で使う引数 include に $post を指定し、チェックが入った記事のみをCSV出力の対象としました。

CSVファイルの中身は自由に追加削除できますので、いろいろ試してみてください。

書いた人:やまライダー(嫁)

Web屋さんで8時間フルタイム勤務をしている、いわゆるワーキングマザー。
夫婦共働きで、ムスメ氏を育てています。
主に資産運用にかかわるお金の話、ムスメ氏を育てていく上での子育ての話、そしてたまにお仕事関連の記事を書いていく予定。
プロフィールを見る