質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.11%

【wordpress】Flamingoのエクスポートについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 771

onobeka

score 22

表題の件について。
有識者の方がいれば教えていただければと思います。

現在wordpressのContact Form 7を利用しお問い合わせフォームを作成しております。
お問い合わせフォームから送信されたメッセージはプラグインのFlamingoを利用して、
送信者のアドレス帳とメッセージの管理を行っています。

アドレス帳はCSVの書き出しが可能で、
・名前
・メールアドレス
の出力を行える仕様となっております。

今回質問させていただきたいのは
問い合わせフォームで「参加者数」を入力するのですが、
この数値を下記に追加したいと思っております。
・Flamingo アドレス帳 一覧の一番右の列に追加
・csv出力を行う際に一番右の列に追加

プラグイン内にあるadmin.phpの203行の内容を下記に変更することで、
csv出力時の項目名を表示することが出来ましたが以降は悪戦苦闘して先に進めません・・

$labels = array(
  __( 'Email', 'flamingo' ),
  __( 'Full name', 'flamingo' ),
  __( 'First name', 'flamingo' ),
  __( 'Last name', 'flamingo' ),
  __( '参加者数', 'flamingo' ),
);

お手数ではありますが
有識者の方がいらっしゃいましたらご助言お願い出来ますでしょうか。

知識が浅く不躾な質問かもしれませんが何卒宜しくお願い致します。

以上です
それでは失礼致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

質問の内容だけでは、情報が少なく回答が難しいのでヒントだけ...

どのようなフォームを定義されたのか不明ですが、Flamingo を使っている場合、フォームで入力された内容は、カスタム投稿タイプ flamingo_inbound に 保存されています。

カスタム投稿タイプ flamingo_inbound のカスタムフィールドを検索して、フィールドのキーと一致する項目を取得して、アドレス帳のCSV出力する部分で、一緒に出力するようにすれば、出力できると思います。

基本的な部分は、前回の( 【wordpress】Flamingoのエクスポートについて )と同じなので、カスタムフィールドのデータを取得できれば対応できると思います。


コメント欄を拝見して...
いろいろツッコミどころがありそうですが、気がついた点として...

  • get_field() を使われていますが、get_field() は、Advanced Custom Fields ( https://www.advancedcustomfields.com ) の関数なので、Advanced Custom Fields プラグインがインストールされていないと PHPのエラーが発生します。

  • $fields_str .= $myterm-> ." _field_your-partner "; も アロー演算子(->) と 結合演算子(.) が連続しているので、文法エラーですね。

  • $item->id で取得できるのは、アドレス帳の「投稿ID」で、メッセージの「投稿ID」ではありませんので、$item->id でメッセージを取得することはできません。


手順としては、

1.カスタム投稿タイプ flamingo_inbound から、メールアドレスが一致するメッセージの投稿IDを検索
2.メッセージの投稿IDからカスタムフィールドを検索
3.アドレス帳のデータと一緒に出力

という感じでしょうか。

コメントに記載された内容を書き直すとこんな感じでしょうか。

foreach ( $items as $item ) {

    $terms_str = "";
    $myterms = get_the_terms( $item->id, 'flamingo_contact_tag' );
    foreach( $myterms as $myterm ){
        $terms_str .= $myterm->name ." ";
    }

    $args = array(
        'post_type'      => 'flamingo_inbound',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key' => '_from_email',
                'value' => $item->email,
            )
        ),
    );
    $fields = get_posts( $args );

    $flds = array();
    foreach( $fields as $field ){
        $flds[] = get_post_meta( $field->ID, '_field_your-partner', true );
    }

    $row = array(
        $item->email,
        $item->get_prop( 'name' ),
        $item->get_prop( 'first_name' ),
        $item->get_prop( 'last_name' ),
        $terms_str,
        implode( ' ', $flds )
    );

    echo "\r\n" . flamingo_csv_row( $row );
}

参考URL:

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/29 20:55

    ご助言ありがとうございます!
    フォームに「参加者数」という入力欄(input要素)がありまして、
    入力した値を[your-partner]というフィールドに入るように設定しています。

    CHERRY様のご助言と下記ページを参考に、
    https://private.hibou-web.com/archives/6730

    こちらの記述を
    foreach ( $items as $item ) {

    //タグを出力
    $terms_str = "";
    $myterms = get_the_terms( $item->id, 'flamingo_contact_tag' );
    foreach( $myterms as $myterm ){
    $terms_str .= $myterm->name ." ";
    }

    $row = array(
    $item->email,
    $item->get_prop( 'name' ),
    $item->get_prop( 'first_name' ),
    $item->get_prop( 'last_name' ),
    //タグを出力
    $terms_str,
    );

    echo "\r\n" . flamingo_csv_row( $row );
    }



    こちらに変更したところ不具合があり何も表示されなくなりました。。。

    foreach ( $items as $item ) {

    $terms_str = "";
    $myterms = get_the_terms( $item->id, 'flamingo_contact_tag' );
    foreach( $myterms as $myterm ){
    $terms_str .= $myterm->name ." ";
    }

    $fields_str = "";
    $myfields = get_field( 'flamingo_inbound', $item->id);
    foreach( $myfields as $myfield ){
    $fields_str .= $myterm-> ." _field_your-partner ";
    }



    $row = array(
    $item->email,
    $item->get_prop( 'name' ),
    $item->get_prop( 'first_name' ),
    $item->get_prop( 'last_name' ),
    $terms_str,
    $fields_str,
    );

    echo "\r\n" . flamingo_csv_row( $row );
    }



    知識が浅いなりに調べたおりましたが、
    どの部分が間違っているのかが分からないのでご助言いただけないでしょうか。
    何度もすみません。

    キャンセル

  • 2019/01/30 00:28

    大変丁寧なご助言をありがとうございます。
    いただいたスクリプトを設置したところ目的が達成されました!
    参考サイトまで紹介していただき本当に感謝しております。
    この度は本当にありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.11%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる