• 解決済 DashieLove

    (@dashielove)


    毎々お世話になっております。
    Contact Form 7についての質問です。Contact Form 7のバージョンは4.7、Flamingoのバージョンは1.5を使用しております(いずれも最新版)。

    Contact Form 7の4.6以上のバージョンには、Flamingoとの連携によってフォームへの投稿に自動でインクリメンタルな値を付与する機能があり、メールタグ[_serial_number]で呼び出すことができます。
    この値は、最初の付与=1から始まり、1ずつ増加していくのですが、この値を手動で変更する方法が分かりません。
    すなわち、例えば手動で100を指定し、次からのフォームメールでは[_serial_number]で呼び出される値が101、102、103…とインクリメントする値としたいのです。

    この値を格納している場所がDB上の***_term_taxonomy上に「flamingo_inbound_channel」taxonomyとして存在していることには気づいたのですが、この値を手動で上書きしてみても次のフォーム送信では値が元に戻ってしまいます。
    (例:flamingo_inbound_channelのcount=7のとき、手動でflamingo_inbound_channelのcount=100に上書きする→フォームメールが送信される→flamingo_inbound_channelのcount値は101ではなく8になってしまう)

    また、DB上でtaxonomyがflamingo_inbound_channelとなっている列が2列存在しており、1つ目の列ではparentとcountがどちらも0になっておりこの値は動きません。2列目ではparentが1行目のflamingo_inbound_channelのterm_taxonomy_idまたはterm_idを指しており、countはインクリメンタル値です。

    値を手動で上書きしてみても駄目ということは、何か別の場所で値を制御しているのではないかと推察されるのですが、その箇所がDB全体を見て回っても見当たりません…。探すのが足りていないのかもしれませんが、どちらで制御が行われているか判断する方法はございませんでしょうか?

    なにとぞよろしくお願い申し上げます。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • _serial_number の値は、Flamingo に保存済みのメッセージ個数(最初は0) + 1 が自動計算されるので、「例えば手動で100を指定」することはできません。

    トピック投稿者 DashieLove

    (@dashielove)

    gblsmさま

    早速のご返信をありがとうございます。
    なるほど、単純に+1していっているのではなく、保存メッセージ数を参照しているのですね。そのような動作だとは想像しておらず、目から鱗です。

    大変勉強になりました。繰り返しになりますが、ご回答ありがとうございました。

    「100を加えた値を _serial_number にする」だけなら、お勧めはしませんが、Contact Form 7 側のコードに少しの変更で実現できそうです。

    該当のコードは以下のファイルにあります。
    https://plugins.trac.wordpress.org/browser/contact-form-7/tags/4.7/modules/flamingo.php#L183

    if ( $channel_id ) {
        return 1 + (int) Flamingo_Inbound_Message::count(
            array( 'channel_id' => $channel_id ) );
    }
    

    ここで100を加えた値を return してあげれば良さそうです。もしかするとフィルターフック wpcf7_special_mail_tags を利用すればプラグインのコードを触らなくて済むかもしれませんが、未検証です。

    • この返信は7年、 8ヶ月前にgblsmが編集しました。
    トピック投稿者 DashieLove

    (@dashielove)

    gblsmさま

    当該動作を担っている部分のコードをわざわざお探しになってきてくださいまして、大変ありがたい限りです。
    確かにフィルターフックで直せそうにも思えますが…考えてみます。

    どうもありがとうございました!

    • この返信は7年、 8ヶ月前にDashieLoveが編集しました。

    検証していませんがコードを考えてみました。

    // 10 < 11: wpcf7_flamingo_serial_number() より後に実行する。
    add_filter( 'wpcf7_special_mail_tags', 'dashielove_add100', 11, 3 );
    
    function dashielove_add100( $output, $name, $html ) {
      if ( '_serial_number' == $name ) {
        if ( is_int( $output ) ) {
          $output += 100;
        }
      }
      return $output;
    }
    
    トピック投稿者 DashieLove

    (@dashielove)

    gblsmさま

    なんと、コードまでお考えくださるとは、感謝の限りです…。完全におんぶにだっこで恐縮の限りです。本当にありがとうございます!

    明日中には私の環境にて検証を行い、結果をこちらで報告いたします。

    トピック投稿者 DashieLove

    (@dashielove)

    gblsmさま

    お考えくださったコードを検証してみました。
    正常にコードが動くことが確認できました!
    本当にありがとうございました。

    なお、トピック立ち上げ時点ではWP4.7.2の環境でしたが、現在(ご提示のコードの検証時)はWP4.7.3にアップデートしております。

     
    その後、この方法を拡張して、複数のフォームがある場合にフォームごとに加える値を変化させるようにするためには、_post_idを参照すればよいはずと思うのですが、上手くいかずに悪戦苦闘しています。
    これ以上お尋ねするのも申し訳ないところではあるのですが、何か考えられ得るヒントはございませんでしょうか、もしよろしかったらお尋ねしたく存じます。

    @dashielove さん、私はわかりませんが、新しいトピックで改めて書き込まれてはどうでしょう。最初のトピックは解決済みですから、他の方の目に止まりにくいと思います。

    トピック投稿者 DashieLove

    (@dashielove)

    gblsmさま

    ご指摘ありがとうございます。おっしゃる通りですね。
    別件になるのでこちらで続けようとするのはお門違いでした。ごめんなさい。

    それでは、このたびは誠にありがとうございました。
    改めて、心より感謝申し上げます。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「Contact Form 7にFlamingoによって付与されるインクリメンタル値の手動変更について」には新たに返信することはできません。