Unser Affiliate Theme ist da! Spare 10% mit dem Gutschein DRWP10 - mehr erfahren!

Contact Form 7 Dropdown mit Werten aus der Datenbank befüllen

Contact Form 7 ist ein sehr beliebtes Plugin, auch wir haben schon öfters darüber geschrieben und wir empfehlen es auch jedem. Das Plugin ist sehr schlank aber durch Entwickler stark anpassbar. Da ein DRWP-Besucher gerade danach fragte, mache ich direkt ein kleines Snippet daraus.

Mit diesem Snippet kannst du ein Dropdown-Feld mit eigenen Werten aus der Datenbank füllen. Denkbare Einsätze wären Einträge aus einem Custom Post Type oder z.B. Benutzerollen. Das kann z.B. für ein Registrierungsformular von Vorteil sein. So kann der Benutzer die gewünschte Mitgliedschaft direkt beim Registrieren auswählen.

Füge einfach den folgenden Code in eine functions.php ein:

/*
 * User-Rollen 
 * Dynamic Select Field
 */
function user_rollen_field ( $tag, $unused ) {

    if ( $tag['name'] != 'user_roles' )
        return $tag;

    global $wp_roles;

    if ( ! $wp_roles)
        return $tag;

    foreach ( $wp_roles->roles as $key=>$value) {
        if('administrator' == $key) continue;

        $tag['raw_values'][] = $key;
        $tag['values'][] = $key;
        $tag['labels'][] = $value;

    }

    return $tag;

}
add_filter( 'wpcf7_form_tag', 'user_rollen_field ', 10, 2);
Wichtiger Hinweis: Wenn du speziell die Benutzerrollen ausgeben möchtest, achte bitte darauf, das du z.B. den Administrator ausschließst, das kann sonst schnell in die Hose gehen. ;-)

Damit das Snippet funktioniert musst du den Feldnamen deines Dropdownfelds in der folgenden Zeile anpassen

if ( $tag['name'] != 'user_roles' )

Anstelle von user_roles musst du deinen Feldnamen einsetzen.

So verwendest du einen Custom Post Type

Wenn du z.B. einen Custom Post Type nutzen möchtest, musst du den Quellcode nur geringfügig anpassen, hier ein Beispiel:

/*
 * Lorem Ipsum
 * Dynamic Select Field
 */
function form_posttype_field ( $tag, $unused ) {

    if ( $tag['name'] != 'post_type_field' )
        return $tag;

    $args = array (
        'numberposts'   => -1,
        'post_type'     => 'your_posttype',
        'orderby'       => 'title',
        'order'         => 'ASC',
    );

    $custom_posts = get_posts($args);

    if ( ! $custom_posts )
        return $tag;

    foreach ( $custom_posts as $custom_post ) {

        $tag['raw_values'][] = $custom_post->post_title;
        $tag['values'][] = $custom_post->post_title;
        $tag['labels'][] = $custom_post->post_title;

    }

    return $tag;

}
add_filter( 'wpcf7_form_tag', 'form_posttype_field', 10, 2);

Über Christian

Die Webentwicklung ist seit 2006 ein großer Teil meines Lebens und seit 2010 kann ich damit auch meine Brötchen verdienen. Ich beschäftige mich speziell mit WordPress und entwickle auch eigene Themes. Die Anpassungsfähigkeit von Wordpress begeistert mich immer wieder, daher möchte ich euch interessante Snippets und Plugins nicht vorenthalten.

WordPress Affiliate ThemeAnzeige

1 Kommentar

Avatar von Michael Neubauer

Michael Neubauer 5. April 2016 um 10:52

Hallo,

vielen Dank für das Snippet – es funktioniert bei mir auch mit der Ausgabe der Posts. Mein Problem: Ich nutze das Plugin Event List um meine Termine zu posten. Dieses nutzt eigene Kategorien. Wie kann ich die Posts, also die Termine die im Plugin erstellt wurden, in meinem Contact Form 7 ausgeben lassen (die Verknüpfung mit dem Feldnamen funktioniert schon)
Vielleicht hast Du ja einen Tipp!

1000 Dank, Michael

Antworten

Hinterlasse eine Antwort

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

Du kannst folgende HTML-Tags benutzen: <strong>, <em>, <u>, <a href="">, <del>, <ul>, <ol>, <blockquote>. Für Code benutze bitte pastebin.com und kopiere den Link in dein Kommentar.
*
*