ACF – dem Taxonomiefeld einen Default-Wert zuweisen.

Bei einem Projekt hatte ich in einem Custom-Post-Type mit ACF eine Taxonomie Auswahl eingebaut. In dem CPT ging es um Materialien die im Internet zugänglich sind und in der Taxonomie stehen Angaben darüber, wie das Material verfügbar ist, also Kostenlos, Kostenlos nach Anmeldung, Kostenpflichtig usw.

Dazu haben wir in ACF das Taxonomie Feld verwendet.

Da der großteil des Materials Kostenlos im Internet verfügbar ist, wurde der Wunsch von den Mitarbeitenden an mich herangetragen, das dieses Feld einen default Wert haben soll, so das die Redakteurinnen und Redakteure dieses Feld und in dem Fall anfassen müssen, wenn das Material nicht kostenlos verfügbar ist. Leider ist es nicht möglich einen default Wert in der Pflegemaske einzugeben.

Dafür stellt ACF den Filter Hook acf/load_value zur Verfügung. Dieser Filter erlaubt es, den Wert eines Feldes direkt nach dem laden aus der Datenbank zu ändern.

 add_filter('acf/load_value', 'my_acf_load_value', 10, 3); 

Der Filter stellt 3 Parameter zur Verfügung.

  • $value – der Wert des Feldes, wie er aus der Datenbank gelesen wurde
  • $post_id – Die ID der Post/CPT aus dem der Wert stammt
  • $field – das ACF Feldobjekt, mit den Daten über die Feldkonfiguration

Um den Filter zu nutzen, stehen 4 Varianten zur Verfügung

  • acf/load_value – Filter für jedes laden eines Werts
  • acf/load_value/type={$field_type} – Filter für das laden spezifischer Feldtypen
  • acf/load_value/name={$field_name} – Filter für das laden von Feldern, basierend auf ihren Namen.
  • acf/load_value/key={$field_key} – Filter für das laden von Feldern, basierend auf ihren eindeutigen Feldschlüssel.

In beidem Beispiel ist der key “field_5dbcxeedaf43x” so das der add_filter Aufruf so aussähe.

add_filter('acf/load_value/key=field_5dbcxeedaf43x', 'set_myfield_default', 20, 3);

Da ich nur einen Default-Wert vorgeben möchte, darf ich der Wert nur überschreiben wenn folgendes erfüllt ist. Der aus der Datenbank “gelesene” Wert ist null und der post_status ist “auto-draft”.  Der vollständige Code sieht dann so aus.

add_filter('acf/load_value/key=field_5dbcxeedaf43x', 'set_myfield_default', 20, 3);

/**
 * Filters the $value after it has been loaded.
 * 
 * @param  mixed $value The value to preview.
 * @param  string $post_id The post ID for this value.
 * @param  array $field The field array.
 *
 * @return mixed $value
 */
function set_myfield_default( $value, $post_id, $field ) {
   if ($value === null && get_post_status($post_id) == 'auto-draft' ) {
      $value = 51;
   }
   return $value;
}

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert