ACF va introduce în noua versiune niște câmpuri foarte mișto, numite clone fields
. Pe scurt, asta va permite definirea unor field groups astfel încât să le poți refolosi în alte field groups.
Doar că apar anumite probleme. De exemplu, nu poți avea un condițional dintr-un field group care să afecteze un câmp dintr-o clonă. Nu poți din UI.
Elliot mi-a dat o idee foarte bună: să mă leg de hook-ul acf/load_field
. Prin urmare, am făcut fix asta:
function addAcfConditional($field, $target, $query)
{
if ($field['key'] == $target) {
$conditional_AND = is_array($query) ? $query : explode('&', $query);
$rules = [];
$pattern = '/==|=|!=/';
foreach ($conditional_AND as $condition) {
preg_match($pattern, $condition, $operator);
$params = preg_split($pattern, $condition);
$rules[] = ['field' => $params[0], 'operator' => ($operator[0] == '=' ? '==' : $operator[0]), 'value' => $params[1]];
}
if (is_array($field['conditional_logic'])) {
$field['conditional_logic'][] = $rules;
} else {
$field['conditional_logic'] = [$rules];
}
}
return $field;
}
Și se folosește așa:
add_filter('acf/load_field', function ($field) {
$field = addAcfConditional($field, 'field_5797c837e4e2a', 'field_579c88a03020f=internal');
$field = addAcfConditional($field, 'field_5797c837e4e2a', 'field_579c88a03020f==foo');
$field = addAcfConditional($field, 'field_5797c837e4e2a', 'field_579c88a03020f!=bar');
return $field;
});
După cum vezi, este foarte dependent de ID-urile fiecărui câmp, prin urmare ar fi bine să adaugi aceste condiționale atunci când ești sigur că lucrurile nu se mai schimbă.
Sigur, ai putea face o chestie mult mai complexă, astfel încât să poți folosi numele field-ului, în loc de ID. Dar consider că ar fi mult mai complexă decât ar trebui să fie