{"id":1181,"date":"2018-05-29T13:26:22","date_gmt":"2018-05-29T11:26:22","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=1181"},"modified":"2018-06-24T12:50:22","modified_gmt":"2018-06-24T10:50:22","slug":"wordpress-bewertungsformular-mit-ajax","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2018\/05\/29\/wordpress-bewertungsformular-mit-ajax\/","title":{"rendered":"WordPress Bewertungsformular mit AJAX"},"content":{"rendered":"<h2>Einleitung<\/h2>\n<p>Sie kennen wahrscheinlich mein Bewertungsformular, es steht am Ende jedes Artikels und erlaubt eine Benotung von sehr gut bis ungen\u00fcgend. Bislang ist es so, dass ich eine Nachricht erhalte, wenn jemand eine Bewertung abgeschickt hat, und die Information nur f\u00fcr mich privat relevant ist. Jetzt dachte ich mir, das geht auch anders: erstens m\u00f6chte ich am Ende jedes Artikels angezeigt bekommen, ob schon Bewertungen vorhanden sind. Und zweitens soll sich die Anzeige automatisch aktualisieren, wenn jemand eine neue Bewertung abgibt. Dazu brauchts a bisserl AJAX, und das geht mit WordPress eigentlich ganz einfach, wenn man das Prinzip einmal \u00fcberrissen hat.<\/p>\n<h2>Formular am Ende jedes Artikels anzeigen<\/h2>\n<p>Daf\u00fcr basteln wir uns ein Plugin, und in das kommt als Erstes mal das Formular und ein Filter, der das ganze ans Ende jedes Contents h\u00e4ngt. Wahlweise kann man das auch in eine Abfrage klemmen, die das Formular nur in der Einzelansicht anzeigt, das fragt man mit dem if(is_single() ab. Sonst ist nichts weiter dabei. Ansonsten gibt es 6 Radiobuttons mit den Noten und einen Button zum absenden des Formulars.<\/p>\n<pre>function el_insertText($content) {\r\n    echo $content.\"&lt;br&gt;&lt;hr&gt;\";\r\n\u00a0 \/\/ if(is_single()) {\r\n\u00a0\u00a0 \u00a0\u00a0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0 echo '&lt;div style=\"border:1px dotted #000; text-align:center; padding:10px;\"&gt;';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 echo '&lt;h4&gt;Dir gef\u00e4llt dieser Beitrag?&lt;\/h4&gt;';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 echo '&lt;p&gt;Dann bewerte ihn!&lt;\/p&gt;';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 echo '&lt;\/div&gt;';\r\n\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0 echo \" &lt;form action = '' method='post'&gt;\";\r\n\u00a0 \r\n\u00a0\u00a0 \u00a0\u00a0 echo \"&lt;fieldset&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;div id = 'noten' class = 'noten' style = 'border:2px solid blue; padding :4px;'&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type='radio'\u00a0 name='note' value='1'&gt;sehr gut\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type='radio' name='note' value='2'&gt;gut\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type='radio' name='note' value='3'&gt;befriedigend&lt;br&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type='radio'\u00a0 name='note' value='4'&gt;ausreichend\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type='radio' name='note' value='5'&gt;mangelhaft\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type='radio' name='note' value='6'&gt;ungen\u00fcgend\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type ='button' name = 'absenden' class = 'bew-button' value = 'abschicken'&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/div&gt;\r\n\u00a0\u00a0 \u00a0\u00a0 &lt;\/fieldset&gt;\";\r\n\u00a0\u00a0 \u00a0echo \"&lt;\/form&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\r\n\u00a0 \/\/ } \/\/End von is_single\r\n\u00a0 \r\n}\r\n<span style=\"color: #008000;\">add_filter<\/span> ('the_content', 'el_insertText');<\/pre>\n<h2>Was brauchen wir f\u00fcr die Verarbeitung?<\/h2>\n<h3>Eine Tabelle zum Speichern der Noten<\/h3>\n<p>Erstens eine Tabelle, in der die Bewertungen gespeichert werden. Ich hab mir da eine kleine L\u00f6sung im PHPmyAdmin angelegt, die Tabelle heisst bewertungen und hat drei Felder, die id als Autowert, die beitrags_id und die note.<\/p>\n<div id=\"attachment_1182\" style=\"width: 457px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1182\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1182\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/05\/tabelle_bewertungen.jpg\" alt=\"tabelle_bewertungen\" width=\"447\" height=\"270\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/05\/tabelle_bewertungen.jpg 447w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/05\/tabelle_bewertungen-300x181.jpg 300w\" sizes=\"(max-width: 447px) 100vw, 447px\" \/><p id=\"caption-attachment-1182\" class=\"wp-caption-text\">tabelle_bewertungen<\/p><\/div>\n<p>WordPress-Puristen schreien hier wahrscheinlich schon Zetermordio, man k\u00f6nnte nat\u00fcrlich die Bewertungen in die wp_options reinklemmen, aber das war mir jetzt zu umst\u00e4ndlich, ich arbeite lieber mit einer eigenen Tabelle.<\/p>\n<h3>Die aktuelle Beitrags-ID<\/h3>\n<p>Zweitens brauchen wir die ID des bewerteten Beitrags, und drittens nat\u00fcrlich die vergebene Note. Die ID holt man sich mit get_the_ID(), und ich schreibe sie als unsichtbaren Text mit rein, das geht so:<\/p>\n<pre>echo \"&lt;span id = 'beitragsid' style='display:none;'&gt;\".get_the_ID().\"&lt;\/span&gt;&lt;br&gt;\";<\/pre>\n<p>Dann kann ich mir nachher anhand der Span-id im Javascript die ID herauspfl\u00fccken. Die Note hole ich mir auch mit dem Script, dazu gleich mehr.<\/p>\n<h3>Eine Logik zur Ausgabe der bereits vorhandenen Bewertungen<\/h3>\n<p>Drittens brauchen wir f\u00fcr die Anzeige der schon vorhandenen Bewertungen eine Abfrage auf unsere Tabelle bewertungen und eine Ausgabe der berechneten Durchschnittsnote sowie der Anzahl der vorhandenen Bewertungen. Das ist nicht weiter wild, mit $wpdb und der BeitragsID ist das fix erledigt.<\/p>\n<pre>global $wpdb;\r\n\u00a0\u00a0 \u00a0$alleposts = $wpdb-&gt;get_results( \"SELECT * from bewertungen \r\n\u00a0\u00a0 \u00a0where beitrags_id = \".get_the_ID().\"\");\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 $gefunden = $wpdb-&gt;num_rows;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0$durchschnitt = 0;\r\n\u00a0\u00a0 \u00a0foreach($alleposts as $einpost){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$durchschnitt = $durchschnitt + $einpost-&gt;note;\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0if ($gefunden != 0){\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0$durchschnitt = $durchschnitt \/ $gefunden;\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0$durchschnitt= round($durchschnitt);<\/pre>\n<p>Damit aus dem gerundeten Notenwert auch ein Wort wird, klemmen wir noch einen switch case dahinter:<\/p>\n<pre>\u00a0\u00a0\u00a0 $wort = '';\r\nswitch ($durchschnitt) {\r\n\u00a0\u00a0\u00a0 case 0:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort = \"keine Bewertung\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0 case 1:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort = \"sehr gut\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0 case 2:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort =\u00a0 \"gut\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0 \u00a0case 3:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort = \"befriedigend\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0 case 4:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort =\u00a0 \"ausreichend\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0 case 5:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort =\u00a0 \"mangelhaft\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0 \u00a0case 6:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort =\u00a0 \"ungen\u00fcgend\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0echo \"&lt;span id = 'ausgabe'&gt;\".$gefunden.\" Bewertungen gefunden, Durchschnitt: \".$wort.\"&lt;span&gt;\";<\/pre>\n<p>Die Ausgabe-Span kriegt gleich noch eine id verpasst, hier schreiben wir nachher unsere aktualisierten Werte rein.<\/p>\n<h2>Das zugeh\u00f6rige Javascript<\/h2>\n<p>&#8230;kommt mit ins Plugin-Verzeichnis, und wird mit enqueue script geladen. Wir schicken mit dem wp_localize_script gleich noch die URL zur admin-ajax.php mit.<\/p>\n<pre>add_action( 'wp_enqueue_scripts', 'el_bew_assets' );\r\nfunction el_bew_assets() {\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #ff0000;\">wp_enqueue_script<\/span>( 'bew', plugins_url( '\/<span style=\"color: #008000;\">el_bewertung.js<\/span>', __FILE__ ), array('jquery'), '1.0', true );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #ff0000;\">wp_localize_script<\/span>( 'bew', 'bewertungen', array(\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'ajax_url' =&gt; <span style=\"color: #008000;\">admin_url( 'admin-ajax.php' )<\/span>));\r\n\r\n\u00a0\u00a0 \u00a0}<\/pre>\n<p>Wir packen unser gesamtes Script in eine document-ready Function, weil sonst JQuery noch nicht geladen sein k\u00f6nnte, wenn wir unser Script ausf\u00fchren.\u00a0 Die Function rennt los, sobald jemand den Bewertungs-Button geklickt hat. Zuerst werden die ben\u00f6tigten Daten auf Variable gelegt, und dann noch abgecheckt ob auch eine Benotung anggeklickt wurde.<\/p>\n<pre>jQuery(document).ready(function($){\r\njQuery( document ).<span style=\"color: #ff0000;\">on( 'click', '.bew-button'<\/span>, function() {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #008000;\">\/\/ Ajax url aus localize script<\/span>\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var a_url = bewertungen.ajax_url;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #008000;\">\/\/Note aus den Radiobuttons holen<\/span>\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var selectedOption = $(\"input:radio[name=note]:checked\").val();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #008000;\">\/\/Beitragsid aus span holen<\/span>\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var akt_id = document.getElementById(\"beitragsid\").innerHTML;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #008000;\">\/\/Check ob keine Note angew\u00e4hlt, Abbruch<\/span>\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (typeof selectedOption === 'undefined'){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0alert('Bitte eine Note w\u00e4hlen!');\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0return;}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var post_note = selectedOption;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0alert('Vielen Dank, ihre Benotung wurde gespeichert');\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 <span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 \u00a0\/\/Ajax-Call\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0jQuery.ajax({<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0url : a_url,<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0type : 'post',<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0data : {<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0action : '<span style=\"color: #ff0000;\">bew_add_bewertung<\/span>',<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0post_id : akt_id,<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0note : post_note<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0},<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0success : function( response ) {<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<\/span><span style=\"color: #0000ff;\">document.getElementById(\"ausgabe\").innerHTML = response;<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}<\/span>\r\n<span style=\"color: #0000ff;\">\u00a0\u00a0 \u00a0})<\/span>;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n})\r\n});<\/pre>\n<p>Der AJAX-Call ist recht einfach, es wird die ajax-admin-URL mitgegeben und als Request-Typ &#8218;post&#8216; definiert. In den data schicken wir zuerst mit, welche Funktion ausgef\u00fchrt werden soll (dazu gleich mehr), und \u00fcbergeben die Beitrags-ID sowie die Note. In der success-Function schreiben wir den R\u00fcckgabewert des Calls in die Span mit der ID ausgabe. Das wars schon!<\/p>\n<p>Jetzt m\u00fcssen wir WordPress nur noch anweisen, die Callback-Function auch zuzuordnen, dazu erg\u00e4nzen wir unser Plugin um folgende Zeilen:<\/p>\n<pre>add_action( 'wp_ajax_nopriv_bew_add_bewertung', 'bew_add_bewertung' );\r\nadd_action( 'wp_ajax_bew_add_bewertung', 'bew_add_bewertung' );<\/pre>\n<p>Das erste Argument mit dem nopriv gilt f\u00fcrs Frontend, das Zweite k\u00f6nnte ich mir eigentlich sparen, das w\u00e4re f\u00fcr die Admin-View und steht hier nur der Vollst\u00e4ndigkeit halber.<\/p>\n<h2>Die Callback-Funktion<\/h2>\n<p>Macht ganz etwas \u00c4hnliches wie unsere Bildschrimausgabe von oben, sie ermittelt anhand der \u00fcbergebenen Beitrags-ID und der Note die aktuellen Zahlen. Daf\u00fcr wird zuerst einmal die neue Bewertung in die Tabelle bewertungen eingetragen (Insert), dann wird neu berechnet und ausgegeben. Den switch case k\u00f6nnte man auch in eine eigene Funktion auslagern, ich habs mit copy&amp;paste gemacht, ist genau dasselbe wie oben.<\/p>\n<pre>function bew_add_bewertung(){\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0global $wpdb;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\/\/Neue Benotung eintragen\r\n\u00a0\u00a0 \u00a0<span style=\"color: #ff0000;\">$wpdb-&gt;insert<\/span>('bewertungen', array(\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'beitrags_id' =&gt; <span style=\"color: #008000;\">$_POST['post_id']<\/span>,\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'note' =&gt; <span style=\"color: #008000;\">$_POST['note']<\/span>\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\/\/gtNeue Anzahl holen\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$alleposts = $wpdb-&gt;get_results( \"SELECT * from bewertungen \r\n\u00a0\u00a0 \u00a0where beitrags_id = \".$_POST['post_id'].\"\");\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 $anzahl = $wpdb-&gt;num_rows;\r\n\u00a0\u00a0 \u00a0$durchschnitt = 0;\r\n\u00a0\u00a0 \u00a0foreach($alleposts as $einpost){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$durchschnitt = $durchschnitt + $einpost-&gt;note;\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0if ($anzahl != 0){\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0$durchschnitt = $durchschnitt \/ $anzahl;\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0$durchschnitt= round($durchschnitt);\r\n\u00a0\u00a0 \u00a0 $wort='';\r\n\u00a0\u00a0 \u00a0switch ($durchschnitt) {\r\n\u00a0\u00a0\u00a0 case 0:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort = \"keine Bewertung\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0 case 1:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort = \"sehr gut\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0 case 2:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort =\u00a0 \"gut\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0 \u00a0case 3:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort = \"befriedigend\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0 case 4:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort =\u00a0 \"ausreichend\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0 case 5:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort =\u00a0 \"mangelhaft\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0 \u00a0case 6:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $wort =\u00a0 \"ungen\u00fcgend\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n}\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0<span style=\"color: #008000;\">$rueckgabe = $anzahl.\" Bewertungen, Durchschnittsnote: \".$wort;<\/span>\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0<span style=\"color: #ff0000;\">echo $rueckgabe;<\/span>\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0die();\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\r\n} \/\/ende function bew_add_bewertung<\/pre>\n<p>Das die() am Ende braucht WordPress, um den Call korrekt auszuf\u00fchren. Aber damit sind wir auch schon fertig. Die bereits vorhandenen Bewertungen werden angezeigt:<\/p>\n<div id=\"attachment_1185\" style=\"width: 543px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1185\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1185\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/05\/bewertungformular1.jpg\" alt=\"bewertungformular1\" width=\"533\" height=\"310\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/05\/bewertungformular1.jpg 533w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/05\/bewertungformular1-300x174.jpg 300w\" sizes=\"(max-width: 533px) 100vw, 533px\" \/><p id=\"caption-attachment-1185\" class=\"wp-caption-text\">bewertungformular1<\/p><\/div>\n<p>Wenn jetzt ein Besucher eine Bewertung abgibt, wird die Anzeige nach Klick auf den absenden-Button automatisch aktualisiert:<\/p>\n<div id=\"attachment_1186\" style=\"width: 544px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1186\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1186\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/05\/bewertungsformular2.jpg\" alt=\"bewertungsformular2\" width=\"534\" height=\"296\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/05\/bewertungsformular2.jpg 534w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/05\/bewertungsformular2-300x166.jpg 300w\" sizes=\"(max-width: 534px) 100vw, 534px\" \/><p id=\"caption-attachment-1186\" class=\"wp-caption-text\">bewertungsformular2<\/p><\/div>\n<p>Man k\u00f6nnte an der Optik noch ein bisschen was verbessern, ich gebs ja zu, aber funktionieren tut die Sache einwandfrei. Wie gesagt, wenn man sich mit der WordPress-eigenen Ajax-Logik einmal auseinandergesetzt hat, ist so etwas nicht wirklich schwierig zu realisieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung Sie kennen wahrscheinlich mein Bewertungsformular, es steht am Ende jedes Artikels und erlaubt eine Benotung von sehr gut bis ungen\u00fcgend. Bislang ist es so, dass ich eine Nachricht erhalte, wenn jemand eine Bewertung abgeschickt hat, und die Information nur f\u00fcr mich privat relevant ist. Jetzt dachte ich mir, das geht auch anders: erstens m\u00f6chte [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[20,21,11,7,4,8,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1181"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=1181"}],"version-history":[{"count":7,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1181\/revisions"}],"predecessor-version":[{"id":1315,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1181\/revisions\/1315"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=1181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=1181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=1181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}