ACFリピーターフィールドにショートコードを追加する

ショートコードを追加

ACFで作ったリピーターフィールド(フィールドタイプ:text)追加と同時に値をセットして、ビジュアルエディタ内で使い回したい。

フィールドを追加すると同時にショートコードをセットしたい

…これがややこしく考えすぎてて手詰まってたんだけど、あっさり解決w
やりたかったことは、

  1. 追加ボタンをクリック
  2. 追加されたフィールドセットのinput[type=”text”]フィールドにショードコードを追加
  3. input[type=”text”]をクリックで全選択
  4. コピー
  5. ビジュアルエディタ内に貼り付け

何がやりたいの?結果どうなればいいの?を書き出すのが大事だなぁと痛感。

eventはこの場合必要ないか (^^)。
※ ACFのリピーターフィールドってソート可能(ドラッグアンドドロップ)だったので、順番入れ替えた際、ショードコードの中身も入れ替えるよう追記した。

ショートコードを追加
追加ボタンをクリックでショートコードを追加する。

ユーザー毎のデータ集計表

入力されたデータをユーザー(投稿者)毎、年区切りで表に出力する。
データの持たせ方にも依るのかもしれないけど、今回は

  • 症例とその症例に対する手術を入力
  • 症例に対する手術は複数
  • 手術は症例特有なものではなく、他の症例でも同じ手術がある
  • それぞれの手術に加えて「その他」を追加する
  • 年別に集計したデータを見たい
  • ユーザー毎の集計(年別)を見たい

な感じだったので、集計用のカスタム投稿タイプとカスタムタクソノミーを「症例」「術名」と作成した。
困った?のは、管理画面は嫌だと言うことで、フロントに置いたフォームから入力してもらう事に。今回は、ACFのacf_formを使った。

症例フィールドで症例を選択すると、関連する術名を絞り込んで表示させて選択という希望だったので、悩んだ挙げ句、フィールド名とカスタムタクソノミーのターム名を関連付けて、フォームから受け取った時点でそれぞれのタクソノミーに登録することにした。

スゲー困ったのは、データの更新。
新規投稿だけなら良いんだけど、フロントからユーザー個別の投稿を編集・削除できるようにしなければならない…(^0^;)
最終的には、新規ならwp_insert_post、更新ならwp_update_postを使った。

投稿のタイトルを症例名_術名_実施日としていたので、更新時にタクソノミーを登録し直す部分で結構ハマった…。。

あとは、テーブルに出力する部分。
rowspanを設定する部分が頭ではわかってるのになかなか出せなかった。
最終的にはデータを配列に入れて、

  • 症例が同じ場合はまとめる
  • 術名の「その他」は並び順で一番下へ

などをunsetやらループやら使って出力した。表へ出力する場合って、配列便利なんすね 😀

ってことで、コード。……長いんだよなぁ…。もちっと短く書けないかなぁ…( ^o^)ノ

【Chrome Developer tools】$_POSTの中身を見る

タイトル通り。 formの中身をChromeのDeveloper toolsで確認する。

  1. フォームのあるページを開く
  2. ⌘+option+i でDeveloper toolsを立ち上げる
  3. Networkタブに切り替え
  4. Recording Network Logをクリック

    Recording Network Logボタン
    クリックで赤くなり、Recording開始。
  5. フォームに入力し、Submitボタンをクリック
  6. Method列でPOSTのある行をクリック
    POSTの行をクリック
  7. 送信されたデータを確認

    送信されたフォームの中身
    今回はACFフォームを使ったのでフィールドの中身が見える 😀