Aan de slag met Ninja Forms-contactformulieren

Voor wie de contactformulieren van Jetpack – zie o.a. daarover ook mijn eerdere bericht – onvoldoende flexibel zijn en in Contact Form 7 (een gelijkaardige WordPress-plugin) de mogelijkheid mist om inzendingen op te slaan, is er Ninja Forms. Met behulp van de (betalende) add-on voor file uploads kun je bovendien bezoekers – of, en da’s waarschijnlijk veiliger, geregistreerde gebruikers – bestanden laten opladen.

Meer dan zomaar een contactformulier

Met die inzendingen en bestanden kun je opnieuw interessante dingen doen. Zo had een mijner klanten een formulier opgezet om zijn websitegebruikers een soort attest te laten insturen. In dit geval zou het attest op het BuddyPress-profiel van de gebruiker in kwestie komen te prijken (maar op een auteurspagina kan zoiets natuurlijk evengoed).

Natuurlijk zou je voor zoiets ook een eigen plugin kunnen ontwikkelen, maar daar komt al snel zoveel bij kijken (een hele admin-interface, bijvoorbeeld), dat het niet eens vergezocht is om er Ninja Forms voor te ‘misbruiken’.

Omdat Ninja Forms-inzendingen niet meer zijn dan een custom post type, kun je ze in een plugin of thema doodeenvoudig aanroepen. Volgend stukje code haalt bijvoorbeeld voor het formulier met form ID 2 alle inzendingen binnen van de gebruiker met user ID 1:

$args = array(
  'post_type' => 'nf_sub',
  'nopaging' => true,
  'author' => 1,
  'meta_query' => array(
    array(
      'key' => '_form_id',
      'value' => 2,
    ),
  ),
);
$submissions = new WP_Query( $args );

Vervolgens kun je doorheen de resultaten loopen. Als je voor het betreffende formulier bijvoorbeeld de verzenddatum wilt weergeven, dan doe je dat (voor elke inzending) als volgt:

if ( $submissions->have_posts() ) :
  while ( $submissions->have_posts() ) : $submissions->the_post();
    echo sprintf(
      __( 'Submitted on %s' , 'my-plugin' ),
      get_the_date( 'd/m/Y' )
    );
  endwhile;
endif;

Als dat allemaal wat vaag klinkt: no worries! Want, kijk: als we er opnieuw het voorbeeld van dat attest bijhalen en ik onder de verzenddatum ook de opgeladen afbeelding (toevallig opgeslagen in het custom field met de wat cryptische naam ‘_field_12’) wil weergeven, dan wordt het geheel (ditmaal uitgebreid met wat HTML):

<?php
if ( $submissions->have_posts() ) :
  while ( $submissions->have_posts() ) : $submissions->the_post();
    ?>
    <div class="date-submitted">
      <?php
      echo sprintf(
        __( 'Submitted on %s' , 'my-plugin' ),
        get_the_date( 'd/m/Y' )
      ); ?>
    </div>
    <div class="uploaded-image">
      <img src="<?php echo esc_attr( get_post_meta( get_the_ID(), '_field_12', true ) ); ?>" alt="">
    </div>
    <?php
  endwhile;
endif;

Het werken met Ninja Forms-inzendingen is met andere woorden niet anders dan het werken met posts en custom fields. Makkelijk, toch!

Tot slot

Wil je liever een wat kleinere voorbeeldafbeelding van het opgeladen bestand weergeven, dan kan dat natuurlijk ook. Omdat Ninja Forms file uploads van WordPress standaard geen attachment ID krijgen toegewezen en er evenmin automatisch thumbnails van worden gegenereerd, is dat evenwel nét iets moeilijker. (En stof voor een volgend bericht, want mijn tijd zit er weer even op.)