技術ブログ
Flamingoの「日別」の絞り込み機能のカスタマイズに関して
2024.05.14
Flamingoの「日別」の絞り込み機能のカスタマイズに関して
ContactForm7のDB推奨プラグインに関する内容と、DBの絞り込み機能のカスタマイズについて記載させて頂きます。
推奨プラグイン
- Flamingo公式サイト
- 作者: Takayuki Miyoshi(Contact Form 7 の開発者)
- 最終更新:3週間前(2024/04/18現在)
- 有効インストール数:800,000+
- csvエクスポート:可能
- データの絞り込み:月毎で絞り込み可能
日別の絞り込みに関して
概要
- Flamingoでは「月別」の絞り込みとエクスポートは可能
- Flamingoでは「日別」の絞り込みとエクスポートはデフォルトでは不可
- 「日別」の「絞り込み」と「エクスポート」のためには、コードを自分で実装する必要あり
各論 コードを自分で実装する 方法
「絞り込み」と「エクスポート」を、WordPressのactionフック admin_footer,admin_enqueue_scripts,pre_get_posts,admin_notices,admin_init を利用して実装
// --日別の絞り込み--------------------------------------------------------
// Flamingo の管理ページに開始日、終了日のフィールドを追加
function add_custom_date_filter() {
wp_enqueue_script('jquery-ui-datepicker');
wp_enqueue_style('jquery-ui-css', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css');
// カスタムフィールドのHTMLとjQuery DatePickerのスクリプトを追加
add_action('admin_footer', function() {
// FlamingoのインバウンドメッセージページのIDを指定する
$screen = get_current_screen();
if ('flamingo_page_flamingo_inbound' === $screen->id) {
$start_date = $_GET['start_date'] ?? '';
$end_date = $_GET['end_date'] ?? '';
?>
id) {
$start_date = $_GET['start_date'] ?? '';
$end_date = $_GET['end_date'] ?? '';
// error_log('From Date: ' . $start_date);
// error_log('To Date: ' . $end_date);
if ($start_date || $end_date) {
$date_query = [];
if ($start_date) {
$date_query['after'] = $start_date;
}
if ($end_date) {
$date_query['before'] = $end_date;
}
$date_query['inclusive'] = true;
$query->set('date_query', [$date_query]);
}
}
}
add_action('pre_get_posts', 'filter_flamingo_query_by_dates');
// --日別のエクスポート--------------------------------------------------------
// Flamingo の管理ページに「エクスポート」用の開始日、終了日フィールドを追加
function flamingo_add_custom_export_form() {
echo '';
}
add_action('admin_notices', 'flamingo_add_custom_export_form');
// 「エクスポート」機能の実装
function flamingo_custom_export() {
if (!isset($_POST['flamingo_export'], $_POST['export_from_date'], $_POST['export_to_date'])) {
return;
}
$from_date = sanitize_text_field($_POST['export_from_date']);
$to_date = sanitize_text_field($_POST['export_to_date']);
if (empty($from_date) || empty($to_date)) {
return;
}
$args = array(
'post_type' => 'flamingo_inbound',
'posts_per_page' => -1,
'date_query' => array(
array(
'after' => $from_date,
'before' => $to_date,
'inclusive' => true
)
)
);
$query = new WP_Query($args);
$filename = "flamingo-data-{$from_date}-to-{$to_date}.csv";
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename={$filename}");
header("Pragma: no-cache");
header("Expires: 0");
$output = fopen("php://output", "w");
fputcsv($output, array('ID', 'Date', 'Sender', 'Subject', 'Message')); // Customize the headers
while ($query->have_posts()) {
$query->the_post();
$post_id = get_the_ID();
$meta = get_post_meta($post_id);
fputcsv($output, array(
$post_id,
get_the_date(),
$meta['your-name'][0], // Assuming 'your-name' is a form field
$meta['your-subject'][0], // Assuming 'your-subject' is a form field
$meta['your-message'][0] // Assuming 'your-message' is a form field
));
}
fclose($output);
exit;
}
add_action('admin_init', 'flamingo_custom_export');
各論 上のコードの補足
- 面倒なので、絞り込みとエクスポートの、開始日終了日のフィールドを一つに統一していません。
各論 コードを自分で実装する 方法
date_queryのstart,endで絞り込みを実装していますが、Flamigo内の絞り込み実装のメインクエリの変数がバージョンアップなどで変わった場合には、調整が必要と思われます。