Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Valider des champs ACF en comparant la valeur de 2 champs
<?php
// Article/tutoriel complet sur https://mosaika.fr/astuces-developpement-acf/
// Documentation officielle https://www.advancedcustomfields.com/resources/acf-validate_value/
/**
* Comparer la valeur de 2 champs pour accepter/refuser leur validation
* Filtre : acf/validate_value
*/
function msk_acf_compare_2_fields_values($valid, $value, $field, $input) {
if (!$valid) return $valid;
// get_acf_post_value() est une fonction helper définie plus bas
$marque = get_acf_post_value('annonce_marque');
$modele = get_acf_post_value('annonce_modele');
if (empty($marque) && empty($modele)) {
return 'Il nous faut au moins la marque ou le modèle du produit';
}
return $valid;
}
//add_filter('acf/validate_value', 'msk_acf_compare_2_fields_values', 10, 4);
add_filter('acf/validate_value/name=annonce_marque', 'msk_acf_compare_2_fields_values', 10, 4);
add_filter('acf/validate_value/name=annonce_modele', 'msk_acf_compare_2_fields_values', 10, 4);
/**
* Recherche une clé dans une array
*/
function search_by_key($array, $key) {
$results = array();
if (is_array($array)) {
if (isset($array[$key])) {
$results[] = $array[$key];
}
foreach ($array as $subarray) {
$results = array_merge($results, search_by_key($subarray, $key));
}
}
return $results;
}
/**
* Recherche d'une valeur d'un champ ACF via son nom (et non sa clé)
*/
function get_acf_post_value($slug = false, $array = false) {
if (!$array) $array = $_POST['acf'];
$key = acf_get_field($slug)['key'];
$results = search_by_key($array, $key);
if (count($results) == 1) return reset($results);
return $results;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.