閉じる

技術ブログ

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 '
'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; 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内の絞り込み実装のメインクエリの変数がバージョンアップなどで変わった場合には、調整が必要と思われます。