サポート » プラグイン » データベースのソート方法

  • takahiro0721

    (@takahiro0721)


    「Contact Form 7」と「Advanced Contact form 7 DB」を使って『お弁当注文フォーム』を作成してみました。
    フォームとデータベースは一応うまく動いてくれています。

    CF7DBの内容を一覧で見たいときのために固定ページで表示させようと思い、CF7DBの開発者向けのショートコードを駆使して表示させるところまではできました。

    この時[acf7db form_id='264' search='2019-04-11']と入力しています。送信日時でフィルターを掛けると、実際の注文受付日が”本日だけ”とは限らないためです。
    こうしたときに、日付を都度更新しないといけないのは厳しく、ほかに「本日分のみ」あるいは「日付を指定して」で表示させる方法がありましたら教えていただきたく思います。

    また、お弁当の種類に「レギュラー」と「おかずのみ」があり、これもソートをかけれたらうれしく思います。

    ヘルプの必要なページ: [リンクを見るにはログイン]

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • munyagu

    (@munyagu)

    こんにちは

    結論から言うと、ご自身で SQL を書き、ショートコードなどを作ることでしか実現は難しそうです。

    Advanced Contact form 7 DB の vsz_acf7_db_shortcode_display_front.php というファイルに
    vsz_cf7_entry_order_byというフィルターフックがあるので、これを使えばソート順を変更することはできそうな感じはします。
    デフォルトのソート順は
    data_id DESC
    となっており、データIDの降順です。

    しかし、このソート順が使われる SQL からすると、ソート順に使える項目は
    id cf7_id data_id name value
    だけで、valueを指定すると日付以外の全ての項目値でのソートになってしまい、あまり意味がありません。

    また、同じファイルの中でvsz_cf7_sortdataといういかにもソートしてそうな関数もあるのですが、ソート順なんか変更していないように見えますし、適当なフィルターフックが無く、ソート順を変更できなさそうです。

    • この返信は5年前にmunyaguが編集しました。
    • この返信は5年前にmunyaguが編集しました。

    <?php
    do_shortcode(“[acf7db form_id=’264′ search=’2019-04-11′]”);
    ?>

    などで、任意文字列内に、ショートコードがあれば実行させることができるので、

    <?php

    function foobar_func( $atts ){
    return do_shortcode(“[acf7db form_id=’264′ search='”. date_i18n(‘Y-m-d’) .”‘]”);
    }
    add_shortcode( ‘foobar’, ‘foobar_func’ );

    みたいなことをやるのも手かなとは思います。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「データベースのソート方法」には新たに返信することはできません。