Categorieën
PHP WordPress

Gravity Forms conditionele omleiding

Gravity Forms is een erg krachtige formulieren plugin voor WordPress. Onlangs hebben we deze plugin gebruikt voor het opzetten van een keuzerondjes vragen test. De bezoeker moest echter afhankelijk van aantal gekozen A, B en C antwoorden doorgestuurd worden naar een specifieke pagina. Standaard kan dit niet binnen Gravity Forms geconfigureerd worden, maar met behulp van een eenvoudig filter functie kan dit wel gerealiseerd worden:

function prefix_test_confirmation($confirmation, $form, $lead, $ajax) {
	if($form['id'] == '1') {
		foreach($form['fields'] as $field) {
			$values[] = $lead[$field['id']];
		}

		$result = array_count_values($values);
		arsort($result);
		$result = key($result);

		switch($result) {
			case 'A':
				$confirmation = array('redirect' => 'http://domeinnaam.nl/test/a-antwoorden/');
				break;
			case 'B':
				$confirmation = array('redirect' => 'http://domeinnaam.nl/test/b-antwoorden/');
				break;
			case 'C':
				$confirmation = array('redirect' => 'http://domeinnaam.nl/test/c-antwoorden/');
				break;
		}
	}

	return $confirmation;
}

add_filter('gform_confirmation', 'prefix_test_confirmation', 10, 4);

Bovenstaande functie telt hoeveel dezelfde antwoorden er zijn gegevens. Dit resulteert in een data array waarbij per antwoord staat hoe vaak deze is gegeven. Vervolgens wordt met behulp van de volgende regels code het meest gegeven antwoord bepaalt:

$result = array_count_values($values);
arsort($result);
$result = key($result);

FatBat geeft deze oplossing op de PHP documentatie website:

Needed to get the index of the max/highest value in an assoc array.
max() only returned the value, no index, so I did this instead.

reset($x);   // optional. 
arsort($x); 
$key_of_max = key($x);   // returns the index.

Mocht je ook een test / enquete willen opzetten in WordPress dan kan Gravity Forms een zeer handige oplossing zijn. Mocht je hier meer informatie over willen dan kun je altijd vrijblijvende contact opnemen met Pronamic.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *