Support » Allgemeine Fragen » Variable von Templete an add_filter-Funktion übergeben

  • Gelöst wphonk

    (@wphonk)


    Hallo!
    Ich möchte den Mail-Empfänger der Caldera Form mit einer Variablen aus dem Template überschrieben, aber ich weiß nicht, wie ich den durch den add_filter (caldera_forms_mailer) bekomme.

    Ich habe mir dazu eine Function mailRecipient() in die functions.php geschrieben, die ich im Template aufrufe und die Variable übergebe.

    functions.php:

    function mailRecipient($mailRecipient) {
        global $mailRecipient;
        return $mailRecipient;
    }
    
    add_filter( 'caldera_forms_mailer', function( $mail, $data, $form ) {
        if ('CF00ABC00' == $form['ID']) {
            $mail['recipients'][] = $mailRecipient;
        }
        return $mail;
    }, 10, 3 );

    Wie bekomme ich die globale Variable ind das caldera_forms_mailer?

    Vielen Dank für die Hilfe!

Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)
  • Ich verstehe nicht, was du mit deiner Funktion mailRecipient() bewirken möchtest.

    Nehmen wir mal an, wir haben eine Funktion

    function tuirgendwas( $attribut ) {
      return $attribut;
    }

    und ich rufe sich mit tuirgendwas( 'Hello Dolly' ); auf, bekomme ich Hello Dolly von der Funktion zurückgegeben. Am Textstring, den ich als Parameter übergebe, ändert sich nichts, weil er unverändert zurückgegeben wird. Also wofür die Funktion?

    Wenn du in deinem Filter (ich bevorzuge, die Funktion getrennt vom Filter zu schreiben, weil das erheblich übersichtlicher wird) einer Variablen eine undefinierte andere Variable zuweist (hier nützt es auch nichts, dass du in deiner nirgendwo aufgerufenen Funktion eine Variable globalisierst), kann das auch nicht so richtig viel bringen.

    Insgesamt scheint der Code unvollständig und die Frage damit kaum zu beantworten.

    PHP-Grundkenntnisse können wir hier nicht vermitteln, weil es den Rahmen sprengen würde.

    Thread-Starter wphonk

    (@wphonk)

    Danke schön!

    Ich breche die Frage noch einmal herunter:
    Im Template habe ich eine ACF-Variable (Mail-Empfänger) und der Wert soll in der add_filter-caldera_forms_mailer-Funktion zu Verfügung stehen. Meine Idee war, dass über eine Globale zu realisieren. Das funktioneirt so aber nicht.
    Was wäre den ein guter Weg um die Variable als Caldera Form-Empfänger zu bekommen?

    Ich danke ein zweites Mal!

    In der Dokumentation von Caldera Forms findest du ein zum Hook caldera_forms_mailer eine Beispielfunktion, wie du einen zusätzlichen Empfänger hinzufügen kannst:

    <?php
    add_filter( 'caldera_forms_mailer', function( $mail, $data, $form ) {
      //MAKE SURE TO CHANGE FORM ID
      if( 'CF1243..' == $form[ 'ID' ] ) {
        $mail[ 'recipients' ][] = 'luke@skywalker.com';
      }
    
      return $mail;
    
    }, 10, 3 );

    Quelle: caldera_forms_mailer

    Ich nehme aufgrund deiner Antwort an, dass du dich an diesem Beispiel orientiert hast, jetzt aber statt Luke-Skywalker einen Empfänger angeben möchtest, den du über Advanced Custom Fields in einem Eigenen Feld angibst?

    Das eigene Feld kannst du laut Dokumentation von ACF mit get_field($selector, [$post_id], [$format_value]); auslesen. Nehmen wir nun an, dass du ein Eigenes Feld Mitarbeiter angelegt hast. Dann müsste das so funktionieren:

    add_filter( 'caldera_forms_mailer', 'add_mitarbeiter_as_recipient', 10, 3 );
    
    function add_mitarbeiter_as_recipient( $mail, $data, $form ) {
      global $post;
    
      $mitarbeiter = sanitize_email( get_field( 'mitarbeiter', $post->ID ) );
    
      //Form-ID muss angepasst werden!
      if( $mitarbeiter && 'CF1243..' == $form[ 'ID' ] ) {
          $mail[ 'recipients' ][] = $mitarbeiter;
      }
    
      return $mail;
    
    }

    Ich hab das jetzt nicht mehr selber getestet, weil ich erst in einer Testumgebung Caldera Forms und ACF installieren, aktivieren und einrichten, ein Custom Field erstellen, Beitrag erstellen und das Feld Mitarbeiter mit einer E-Mail-Adresse füllen müsste, was mir im Moment für kostenlosen Support ein wenig zuviel Aufwand war. Probier mal, ob du mit der Funktion zurecht kommst.

    Thread-Starter wphonk

    (@wphonk)

    Danke! Das funktioniert. Auf get_field() in dem Zusammenhang bin ich gar nicht gekommen.
    Ich wollte das mit einer globalen Variable lösen, weiß aber bis jetzt noch nicht, wie und ob das funktioneiren könnte.

    Merci!

    Danke für die Rückmeldung. Freut mich, dass es klappt.

Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)
  • Das Thema „Variable von Templete an add_filter-Funktion übergeben“ ist für neue Antworten geschlossen.