Wie man in WordPress mit WP-Polls den Benutzer auf offene Umfragen nach der Anmeldung hinweisen kann
WP-Polls von Lester ‚GaMerZ‘ Chan ist ein wirklich toll gemachtes Plugin, mit dem sich einfach und genial Umfragen erstellen lassen. Ich benutze dieses Plugin in meinem kleinen Projekt auch dafür, Terminabstimmungen mit den Teilnehmern durchzuführen.
Die Funktionsweise von WP-Polls wird hier nicht beschrieben.
Was ich für mein kleines Projekt erreichen möchte ist, die Teilnehmer nach dem Login in die Website ggf. darauf aufmerksam zu machen, dass es noch nicht von ihnen beantwortete Umfragen gibt.
Ziel ist also, dem Benutzer nach seiner Anmeldung alle noch offenen Umfragen auf einer Seite anzuzeigen und diese ihn dort auch beantworten zu lassen (kennt man bspw. auch bei eBay, wenn es um die Bewertungen dort geht). Sollte es keine offenen Umfragen für den Benutzer geben, so soll er zur Startseite weitergeleitet werden.
Und so soll es nach der Anmeldung aussehen :
Sollten weitere offene Umfragen für den Benutzer vorhanden sein, werden diese natürlich ebenfalls aufgelistet und der Hinweistext ändert sich entsprechend :
Was ist zu tun?
Schritt 1
Ein Plugin installieren, damit PHP-Code aus einer Seite oder einem Beitrag exekutiert werden kann. Ich verwende „Insert PHP Code Snippet“.
Schritt 2
Eine Umfrage (Poll) mit WP-Polls erzeugen und in eine Seite/einen Beitrag einbinden.
Schritt 3
Einen PHP-Schnipsel in dem PHP-Plugin anlegen und folgenden Code speichern :
<?php /* Da ich mir der mir gegebenen PHP-Version gewaltige Schwierigkeiten bei den meisten Array-Funktionen hatte, habe ich nach alter Weise mit Schleifen gearbeitet. */ global $current_user; get_currentuserinfo(); $thisUser = $current_user->id; $post_ids = array(); $post_ids_temp = array(); $query = " SELECT wp_posts.ID, wp_pollsq.pollq_id, wp_pollsip.pollip_userid FROM wp_posts JOIN wp_pollsq ON wp_pollsq.pollq_active = 1 AND wp_posts.post_status = 'publish' AND wp_posts.post_content LIKE CONCAT('%[ACHTUNG !!!POLL ID=\"',wp_pollsq.pollq_id,'\"]%') JOIN wp_pollsip ON wp_pollsip.pollip_qid = wp_pollsq.pollq_id"; $postids = $wpdb->get_results( $query ); $wpdb->show_errors(); foreach ( $postids as $id ) { array_push( $post_ids_temp, $id->ID); } $post_ids = array_values( $post_ids_temp ); foreach ( $postids as $id ) { for ( $i = 0; $i < count( $post_ids ); $i++ ) { if ( ( $id->pollip_userid == $thisUser ) && $post_ids[ $i ] == $id->ID ) { $post_ids[ $i ] = "X"; } } } $post_ids = array_unique( $post_ids ); while ( array_search( "X", $post_ids, true ) === true ) unset( $post_ids[ array_search( "X", $post_ids, true ) ] ); $cnt = 0; foreach ($post_ids as $post) if ( $post != "X" ) $cnt += 1; /* keine Umfrage(n) offen? Dann ab zur gewohnten Startseite, bei mir #474 */ if ( $cnt == 0 ) wp_redirect( esc_url( get_permalink( 474 ) ) ); echo "<h3>Hallo ".$current_user->display_name." !<br><br>Es gibt ".($cnt == 1 ? "eine Umfrage, zu der" : $cnt." Umfragen, zu denen")." es bislang keine Antwort von dir gibt.<br>"; echo "Bitte nehme dir ein wenig Zeit und gebe deine Stimme".($cnt == 1 ? "" :"n")." ab:</h3><br><br><br><hr>"; $req = 0; foreach ($post_ids as $post) { if ( $post != "X" ) { $post = get_post( $post ); echo "<h1>".$post->post_title."</h1><br>"; $output = apply_filters( 'the_content', $post->post_content ); echo $output; echo "<hr>";} } ?>
Bitte daran denken, dass meine WordPress-Tabellen den Präfix „wp“ haben. Daher dringend den eigenen Präfix, bspw. wp_* benutzen.
Bitte auch aus der SQL-Query das „ACHTUNG !!!“ löschen und POLL ID in kleinen Buchstaben schreiben. Ich musste es so machen, da sonst WP-Polls dies als seinen Aufruf erkennt und mitten im Quelltext eine Umfrage platziert hätte 😉
ACHTUNG !!!POLL ID
Die Seite 474
get_permalink( 474 )
ist in meinem Fall die reguläre Startseite, auf die ich hier verweise, sollten es keine offenen Umfragen für den Benutzer geben.
Schritt 4
Den PHP-Schnipsel nun in eine neue Seite, bspw. „Bislang nicht beantwortet Umfragen“ einfügen, ggf. ohne <?php … und …?>, je nach Plugin.
Schritt 5
Auf diese neue Seite nach der Anmeldung des Benutzers verweisen.
Fertig!
So, nun viel Spaß und Erfolg damit.