質問の回答に基づいて別のページに移動させる

WordPress お問い合わせフォームから質問の回答に応じて別のページに移動したい場合があります。 たとえば、アンケートの作成者の選択によって、「マーケティング」、「カスタマーサポート」、または他の部門のページやサイトに移動したい場合があります。 このような状況では、WPFormsやQuformなどのコンタクトフォームプラグインを使用して、特定のアイテムの回答に従って目的の場所にリダイレクトできます。

WPFormsプラグインを使用して質問の回答に基づいて、他のページやサイトに移動させる

WPFormsは300万個以上のサイトに使用されている無料のコンタクトフォームのプラグインです。 無料版では、機能に制限がありますが、シンプルなお問い合わせフォームを WordPress サイトにつけてたいときに使用することができます。

WPFormsでは、次のようなコードをテーマの関数ファイルに追加して、特定の項目への回答に基づいて目的のページまたはサイトに移動させることができます。

// 질문의 답변에 따라 다른 페이지 또는 사이트로 이동시키기
/**
 * WPForms: Conditional form redirects based on field value. 필드 값에 따라 조건부 리디렉션
 *
 * @param string $url URL form will redirect to
 * @param int $form_id Form ID
 * @param array $fields Submitted form fields
 * @return string
 */
function wpf_custom_redirect( $url, $form_id, $fields ) {
	
	// Only consider changing the redirect if its for form #50
	if ( '50' == $form_id ) {

		// In the example below, we look at the submitted value for field #5
		// If that value is "test", then we change the redirect URL
		if ( !empty( $fields['5']['value'] ) && 'test' == $fields['5']['value'] ) {
			$url = 'https://wpforms.com';
		}
	}

	return $url;
}

add_filter( 'wpforms_process_redirect_url', 'wpf_custom_redirect', 10, 3 );

// 출처: https://gist.github.com/slaFFik/ff355fe1d3f2ba8670691852112b5912

上記のコードではform_idは、実際のフォームIDに変更する必要があります。 そしてfield IDもそのフィールドIDに変更してください。 コードは、チャイルドテーマの関数ファイル(functions.php)に追加する必要が今後のテーマを更新時に追加したコードが消えません。

上記のコードが動作するには、お問い合わせフォームの 確認 設定で 確認タイプGo to URL(Redirect)に設定し、 Confirmation Redirect URLフォームが提出された後、移動先のページやサイトのURLを入力する必要があります。

質問の回答に基づいて別のページに移動させる -  WPForms WordPress コンタクトプラグイン

Quformプラグインを使用して質問の回答に基づいて、他のページやサイトに移動させる方法

有料コンタクトフォームのプラグインである Quformでもユーザーの回答に基づいて送信ボタンをクリックしたときに、他のページやサイトにリダイレクトすることができます。

例コード:

// 특정 질문의 답변에 따라 다른 페이지 또는 사이트로 이동시키기
// Redirect users depending on the answer to a specific question in Quform
add_filter('quform_confirmation_redirect_url_1_1', function ($url, Quform_Confirmation $confirmation, Quform_Form $form) {
	$choice = $form->getValue('quform_1_5');
	if ('Yellow' == $choice) {
    $url = 'https://www.google.com';
    }
    elseif ('Green' == $choice) {
    $url = 'https://www.yahoo.com';	
    }
    return $url;
}, 10, 3);

上記のコードで1_1をconfirmation unique IDに変更する必要があります。 そしてフィールドID(上記のコードでは、1_5)も適切に変更してください。 同様チャイルドテーマの関数ファイルに、上記のコードスニペットを追加する必要が今後のテーマの更新時に追加した内容が初期化されません。

WPFormsと同様にQuformも、上記のコードが動作するには、Confirmationの設定でお問い合わせフォームを提出後、カスタムURLにリダイレクトするためのオプションを選択する必要があります。 確認設定 画面で タイプカスタム URL にリダイレクトする選択したURLにフォームを送信した後移動先のURLを入力します。

Quform WordPress お問い合わせプラグイン - フォームの送信後の動作設定

Gravity Formsプラグインでフォームの送信後にリダイレクトされるURLを設定する

Gravity Formsプラグインを使用している場合は、次のようなフック(フィルタ)を応用することができます。 以下は、フォームIDに基づいてフォームを送信した後の動作(リダイレクト/確認メッセージ)を制御するためのコードです。 フィールドの値をチェックする条件文を追加すると、上記で述べたのと同様の効果を得ることができるでしょう。

add_filter( 'gform_confirmation', 'custom_confirmation', 10, 4 );
function custom_confirmation( $confirmation, $form, $entry, $ajax ) {
    if( $form['id'] == '101' ) {
        $confirmation = array( 'redirect' => 'http://www.google.com' );
    } elseif( $form['id'] == '102' ) {
        $confirmation = "Thanks for contacting us. We will get in touch with you soon";
    }
    return $confirmation;
}

セキュリティを考慮して、次のようにコードを改善することもできます。

<?php
/**
 * Gravity Forms 제출 후 확인(컨펌) 동작 개선 예시
 * - 폼별로 리디렉션/메시지를 설정하는 맵 기반 구성
 * - URL 정제(esc_url_raw), 메시지 KSES 적용
 * - entry_id 등 쿼리스트링을 선택적으로 추가
 * - 엄격 비교 및 가드 조건
 *
 * 사용법:
 * - $config 배열에 폼 ID를 키로 하여 동작을 정의하세요.
 *   type: 'redirect' | 'message'
 *   url: 리디렉션할 절대 URL 또는 get_permalink()로 만든 내부 URL
 *   append_query: 리디렉션 시 붙일 쿼리스트링 배열(선택)
 *   message: ユーザー에게 보여줄 HTML 허용 메시지(선택)
 */

add_filter( 'gform_confirmation', 'custom_confirmation_improved', 10, 4 );
function custom_confirmation_improved( $confirmation, $form, $entry, $ajax ) {
	// 폼 ID 안전 획득
	$form_id = isset( $form['id'] ) ? (int) $form['id'] : 0;
	if ( $form_id <= 0 ) {
		return $confirmation;
	}

	// 폼별 설정
	$config = [
		// 예: 폼 101은 구글로 리디렉션
		101 => [
			'type'         => 'redirect',
			'url'          => 'https://www.google.com',
			'append_query' => [
				// 필요 시 전송: 제출 항목 ID, 폼 ID, ユーザー 정의 값 등
				'entry_id' => rgar( $entry, 'id' ),
				'form_id'  => $form_id,
			],
		],

		// 예: 폼 102는 메시지 출력
		102 => [
			'type'    => 'message',
			'message' => __( 'Thanks for contacting us. We will get in touch with you soon.', 'your-textdomain' ),
		],

		// 예: 내부 페이지로 리디렉션(페이지 ID 123)
		// 103 => [
		// 	'type' => 'redirect',
		// 	'url'  => get_permalink( 123 ),
		// ],
	];

	// 매칭되는 설정이 없으면 기본 컨펌 유지
	if ( ! isset( $config[ $form_id ] ) ) {
		return $confirmation;
	}

	$rule = $config[ $form_id ];

	// 리디렉션 처리
	if ( isset( $rule['type'] ) && $rule['type'] === 'redirect' ) {
		$url = isset( $rule['url'] ) ? $rule['url'] : '';
		$url = esc_url_raw( $url );

		// 선택적으로 쿼리스트링 추가
		if ( ! empty( $rule['append_query'] ) && is_array( $rule['append_query'] ) ) {
			$append = [];
			foreach ( $rule['append_query'] as $k => $v ) {
				// 스칼라만 허용, 문자열로 인코딩
				if ( is_scalar( $v ) ) {
					$append[ $k ] = rawurlencode( (string) $v );
				}
			}
			if ( ! empty( $append ) ) {
				$url = add_query_arg( $append, $url );
			}
		}

		// Gravity Forms는 배열 리턴 시 자체적으로 안전 리디렉션을 처리
		return [ 'redirect' => $url ];
	}

	// 메시지 출력 처리
	if ( isset( $rule['type'] ) && $rule['type'] === 'message' ) {
		$message = isset( $rule['message'] ) ? $rule['message'] : '';
		// 허용된 HTML만 출력
		return wp_kses_post( $message );
	}

	// 정의되지 않은 타입이면 기본 컨펌 유지
	return $confirmation;
}

グラビティフォームプラグインで提供されるフックは Hooks文書を参考にしてみてください。 フック(アクション/フィルタ)の詳細な説明と一緒に例示が出ているので、簡単に応用が可能であることです。

最後に、

WordPressで、特定の質問に対するユーザーの回答に基づいて、他のページやサイトに移動する方法について説明しました。 WordPress クイズプラグインでも、このような機能を提供する場合、クイズの回答に基づいて別のページに移動することが可能になります。 (使用しているクイズプラグイン開発者に連絡して、同様の機能を提供しているを確認してみるといいようです。)

WordPress コンタクトフォームのプラグインでは、Contact Form 7が最も多く使用されていて、その後に続いてWPFormsが名を連ねています。 CF7は、フォームの送信後にリダイレクトするURLを設定するためのフックを提供していないようです。

参照

コメントを残す

コメントを残す