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

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

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

4343閲覧

MWWPFormでACFのリピーターフィールドを利用した動的な選択肢を表示させたい

tateyo

総合スコア15

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/01/25 04:40

編集2019/01/25 08:44

前提・実現したいこと

Wordpressで製作したウェブサイトの投稿で、イベントの紹介と予約を促す記事を作成する際に、
Advanced Custom Fieldsのリピーターフィールドに
例えば、
・1月25日のAイベント
・1月26日のBイベント
のようにイベント名の選択肢を入力した分だけフォームへ反映する形を目指しています。
また、イベントのジャンルが異なる場合もある(セミナー、イベント、◯◯会などある)ため、
投稿ごとに選択肢を変えることができるよう、イベント名の入力フォームはAdvanced Custom Fields PRO版のリピーターフィールドを利用しています。
予約フォームにはMW WP Formを利用しています。

該当のソースコード

php

1・該当のmw-wp-form 2[mwform_select name="entry_date" id="entry_date" show_error="false" class="xxx" children="" value=""] 3 4・functions.php 5add_filter( 'mwform_choices_mw-wp-form-324', 'SELECT_LOOP', 10, 2 ); 6function SELECT_LOOP( $children, $atts ) { 7 if ( $atts['name'] == 'entry_date' ) { 8 if( have_rows('yoyakuevent') ) : 9 while( have_rows('yoyakuevent') ) : the_row(); 10 $select = get_sub_field('eventname'); 11 $children[$select] = $select; 12 endwhile; 13 endif; 14 } 15 return $children; 16}

試したこと

リピーターフィルド名:yoyakuevent、イベント名をeventnameとして
MW WP Form側で「URL引数を有効にする」を有効にして、{yoyakuevent_0_eventname}とすれば表示されましたが、
選択肢の数は固定ではないので断念。
提示した内容のようにfunctions.phpへ記述してみたのですが、セレクトボックスの中身はブランクで、have_rows('yoyakuevent')がfalseでした。

▼参考にした記事など
https://teratail.com/questions/75713
https://plugins.2inc.org/mw-wp-form/manual/url-query/
https://webmemolog.com/web/wordpress/20171022_695

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/01/25 09:20

> 提示した内容のようにfunctions.phpへ記述してみたのですが、セレクトボックスの中身はブランクで、have_rows('yoyakuevent')がfalseでした。 コードの中で、名前だけ書かれても名前がどの項目を示しているかわからないので、関連する部分のループ名も含めたカスタムフィールドの定義も質問に記載していただけないでしょうか?
guest

回答2

0

CHERRY様の回答より、下記の設定で実現できました。

カスタムフィールドの定義![イメージ説明

投稿ページ( single.php ) からフォームを呼び出すリンク

<a href="/フォームページのスラッグ/?post_id=<?php echo $post->ID;?>">このイベントを予約</a>

MW WP Formで選択肢を表示する、URL引数を有効にする

[mwform_checkbox name="select_event" children="" value=""]

フォームを表示する固定ページへMW WP Formのショートコードを貼り付け

php

1<?php echo do_shortcode( '[mwform_formkey key="324"]' ); ?>

function.phpで

php

1function select_entryevent( $children, $atts ) { 2 3 if ( $atts['name'] == 'select_event' && !empty( $_GET['post_id'] ) ) { 4 $pid = wp_unslash( $_GET['post_id'] ); 5 if( have_rows('yoyakuevent', $pid) ) : 6 while( have_rows('yoyakuevent', $pid) ) : the_row(); 7 $eventdate = get_sub_field('date'); 8 $eventtime = get_sub_field('time'); 9 $eventname = get_sub_field('eventname'); 10 $select = $eventdate."(".$eventtime.")".$eventname; 11 $children[$select] = $select; 12 endwhile; 13 endif; 14 } 15 16 return $children; 17} 18add_filter( 'mwform_choices_mw-wp-form-324', 'select_entryevent', 10, 2 );

投稿2019/01/25 12:13

編集2019/01/25 12:17
tateyo

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

カスタムフィールドの構造とか不明点も多いのですが、推測できる範囲で...

MW WP Form で作成したフォームのショートコードは、固定ページに貼り付けてあると仮定。

「URL引数を有効にする」を有効にして、各投稿ページ( single.php ) からフォームをこのようなリンクで呼び出していると仮定。

<a href="/フォームページのスラッグ/?id=<?php echo $post->ID;?>">このイベントを予約</a>

フォームのページでは、URL引数で post-id を受け取って、 post-id のデータを呼び出すようにする感じに書き換えてみましたが下記のような感じでどうでしょうか?

function select_entry_date_170813( $children, $atts ) { if ( $atts['name'] == 'entry_date' && !empty( $_GET['id'] ) ) { $pid = wp_unslash( $_GET['id'] ); if( have_rows('yoyakuevent', $pid) ) : while( have_rows('yoyakuevent', $pid) ) : the_row(); $item = get_sub_field('yoyakuevent'); $children[$item] = $item; endwhile; endif; } return $children; } add_filter( 'mwform_choices_mw-wp-form-52', 'select_entry_date_170813', 10, 2 );

参考:

投稿2019/01/25 10:25

編集2019/01/25 10:27
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tateyo

2019/01/25 11:56

回答ありがとうございます! 結論から言えば、ご提示いただいた内容で実現できました。 仮定とされていた部分はおっしゃる通りで、 function.php内でどのようにpostを指定できるかが勉強になりました。 ご質問いただいていましたカスタムフィールドの定義含めて、解決方法へ残します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問