技術ブログ
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 を利用して実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
// --日別の絞り込み-------------------------------------------------------- // 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'] ?? ''; ?> <script type="text/javascript"> jQuery(document).ready(function($) { $('<label for="start_date">開始日:</label><input type="text" id="start_date" value="<?php echo $start_date; ?>" name="start_date" placeholder="yyyy-mm-dd" style="margin-left: 8px; margin-right: 8px;">' + '<label for="end_date">終了日:</label><input type="text" id="end_date" value="<?php echo $end_date; ?>" name="end_date" placeholder="yyyy-mm-dd">') .insertBefore('.tablenav.top .actions.bulkactions'); // 適切な場所に挿入 $('#start_date, #end_date').datepicker({dateFormat: 'yy-mm-dd'}); }); </script> <?php } }); } add_action('admin_enqueue_scripts', 'add_custom_date_filter'); // 「絞り込み」を実装 function filter_flamingo_query_by_dates($query) { $screen = get_current_screen(); if ('flamingo_page_flamingo_inbound' === $screen->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 '<form action="" method="post">'; echo '<input type="hidden" name="flamingo_export" value="1">'; echo '<label for="export_from_date">From:</label>'; echo '<input type="date" name="export_from_date" id="export_from_date" required>'; echo '<label for="export_to_date">To:</label>'; echo '<input type="date" name="export_to_date" id="export_to_date" required>'; echo '<input type="submit" value="Export Data">'; echo '</form>'; } 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内の絞り込み実装のメインクエリの変数がバージョンアップなどで変わった場合には、調整が必要と思われます。