{"id":11450,"date":"2024-09-02T10:00:14","date_gmt":"2024-09-02T08:00:14","guid":{"rendered":"https:\/\/eugigufo.net\/it\/?page_id=11450"},"modified":"2025-01-18T15:26:24","modified_gmt":"2025-01-18T14:26:24","slug":"paragrafo37","status":"publish","type":"page","link":"https:\/\/eugigufo.net\/it\/inerario\/paragrafo37\/","title":{"rendered":"&sect;&nbsp;37. Come visualizzare tutti i sondaggi WP Polls su una pagina"},"content":{"rendered":"<p>Un&nbsp;giorno mi&nbsp;sono chiesto: come si&nbsp;fa&nbsp;a&nbsp;raccogliere&nbsp;\/ visualizzare tutti i&nbsp;sondaggi attivi creati con il&nbsp;plugin WP&nbsp;Polls sulla stessa unica pagina? Ovviamente, mi&nbsp;riferisco ai&nbsp;soli sondaggi ancora aperti al&nbsp;voto: infatti, tra le&nbsp;impostazioni del plugin in&nbsp;questione c&rsquo;&egrave; solamente l&rsquo;opzione di&nbsp;creare una pagina con l&rsquo;&laquo;archivio dei sondaggi&raquo; sulla quale vengono mostrati i&nbsp;risultati di&nbsp;tutti i&nbsp;sondaggi, indipendentemente dal fatto che il&nbsp;visitatore del sito abbia gi&agrave; votato in&nbsp;ognuno di&nbsp;essi o&nbsp;meno. Ma&nbsp;se&nbsp;volessimo dare a&nbsp;tutti la&nbsp;possibilit&agrave; di&nbsp;partecipare comodamente a&nbsp;tutti i&nbsp;sondaggi vecchi?<br \/>\nE&nbsp;allora ho&nbsp;deciso di&nbsp;creare da&nbsp;solo quella pagina con tutti i&nbsp;sondaggi attivi. Le&nbsp;caratteristiche di&nbsp;quella pagina devono, almeno per&nbsp;me, essere molto semplici:<br \/>\n&ndash;&nbsp;visualizzare tutti i&nbsp;sondaggi attivi, partendo dal pi&ugrave; recente;<br \/>\n&ndash;&nbsp;numerare i&nbsp;sondaggi visualizzati, assegnando il&nbsp;numero&nbsp;1 al&nbsp;sondaggio pi&ugrave; vecchio;<br \/>\n&ndash;&nbsp;per ogni sondaggio visualizzare solo la&nbsp;domanda, le&nbsp;possibili risposte, il&nbsp;buttone &laquo;vota&raquo; e&nbsp;la&nbsp;data di&nbsp;creazione.<br \/>\nPer capire da&nbsp;dove tirare fuori tutti i&nbsp;dati relativi ai&nbsp;singoli sondaggi dobbiamo andare sul database dove &egrave;&nbsp;installata la&nbsp;copia di&nbsp;WordPress che utilizza il&nbsp;plugin dei sondaggi. Su&nbsp;quel database scopriamo che la&nbsp;tabella contenente i&nbsp;sondaggi ha&nbsp;il&nbsp;prefisso pollsq. Studiando la&nbsp;struttura della tabella, scopriamo quali campi di&nbsp;essa ci&nbsp;servono per la&nbsp;realizzazione dei punti&nbsp;1&nbsp;e&nbsp;3 della breve lista riportata sopra (la&nbsp;numerazione dei sondaggi visualizzati, invece, &egrave;&nbsp;una cosa che possiamo fare con le&nbsp;forze proprie, non ci&nbsp;serve alcun dato dal database). In&nbsp;particolare, ci&nbsp;servono:<br \/>\n&ndash;&nbsp;poll_timestamp (contiene la&nbsp;data della creazione del sondaggio);<br \/>\n&ndash;&nbsp;poll_id (contiene l&rsquo;id del sondaggio).<br \/>\nTiriamo fuori tutti i&nbsp;sondaggi dalla tabella, li&nbsp;ordiniamo in&nbsp;base alla data decrescente e&nbsp;li&nbsp;pubblichiamo sulla stessa pagina con un&nbsp;ciclo che genera il&nbsp;shortcode di&nbsp;visualizzazione per ogni sondaggio esistente sulla base del suo&nbsp;id. Ci&nbsp;viene un&nbsp;codice PHP di&nbsp;questo tipo:<\/p>\n<pre class=\"brush: php; collapse: false; title: listing 1; notranslate\" title=\"listing 1\">\r\n&amp;lt;?php\r\n   global $wpdb;\r\n   $polls_table = $wpdb-&amp;gt;prefix . &#039;pollsq&#039;;\r\n   $polls = $wpdb-&amp;gt;get_results(&amp;quot;SELECT * FROM $polls_table WHERE pollq_active = 1 ORDER BY pollq_timestamp DESC&amp;quot;);\r\n   if ($polls) {\r\n      foreach ($polls as $poll) {\r\n         $poll_date = date(&#039;d\/m\/Y&#039;, $poll-&amp;gt;pollq_timestamp);\r\n         echo &#039;&amp;lt;div class=&amp;quot;poll&amp;quot;&amp;gt;&#039;;\r\n         echo &#039;&amp;lt;h4&amp;gt;Sondaggio \u2116&#039; . esc_html($poll_number) . &#039; (del &#039; . esc_html($poll_date) . &#039;)&amp;lt;\/h4&amp;gt;&#039;;\r\n         echo do_shortcode(&#039;&#x5B;poll id=&amp;quot;&#039; . intval($poll-&amp;gt;pollq_id) . &#039;&amp;quot;]&#039;);\r\n         echo &#039;&amp;lt;\/div&amp;gt;&amp;lt;br \/&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;br \/&amp;gt;&#039;;\r\n         }\r\n   }\r\n   else\r\n      {\r\n        echo &#039;&amp;lt;p&amp;gt;Nessun sondaggio attivo trovato.&amp;lt;\/p&amp;gt;&#039;;\r\n      }\r\n?&amp;gt;\r\n<\/pre>\n<p>\nGi&agrave; fatto in&nbsp;questo modo il&nbsp;codice funziona, nel senso che visualizza sulla stessa pagina tutti i&nbsp;sondaggi con le&nbsp;rispettive date, permettendo all&rsquo;utente di&nbsp;partecipare comodamente a&nbsp;tutti i&nbsp;sondaggi che vuole.<br \/>\nCi&nbsp;resta da&nbsp;fare la&nbsp;numerazione dei sondaggi visualizzati, ma&nbsp;questo &egrave;&nbsp;un&nbsp;esercizio del tipo scolastico.<br \/>\nPrima del ciclo creiamo una variabile-contatore, alla quale assegniamo come valore la&nbsp;quantit&agrave; totale dei sondaggi (la&nbsp;quantit&agrave; dei sondaggi pu&ograve; aumentare col tempo, ma&nbsp;questo non significa che dobbiamo modificare lo&nbsp;script tutte le&nbsp;volte).<\/p>\n<pre class=\"brush: php; collapse: false; title: listing 2; notranslate\" title=\"listing 2\">\r\n$poll_number = count($polls);\r\n<\/pre>\n<p>\nMentre nel ciclo che gi&agrave; abbiamo facciamo decrementare il&nbsp;valore di&nbsp;quella variabile di&nbsp;1&nbsp;ogni volta che viene visualizzato un&nbsp;sondaggio:<\/p>\n<pre class=\"brush: php; collapse: false; title: listing 3; notranslate\" title=\"listing 3\">\r\n$poll_number--;\r\n<\/pre>\n<p>\nEcco, dunque, il&nbsp;codice completo della soluzione:<\/p>\n<pre class=\"brush: php; collapse: false; title: listing 4; notranslate\" title=\"listing 4\">\r\n&amp;lt;?php\r\n   global $wpdb;\r\n   $polls_table = $wpdb-&amp;gt;prefix . &#039;pollsq&#039;;\r\n   $polls = $wpdb-&amp;gt;get_results(&amp;quot;SELECT * FROM $polls_table WHERE pollq_active = 1 ORDER BY pollq_timestamp DESC&amp;quot;);\r\n   if ($polls) {\r\n      $poll_number = count($polls);\r\n      foreach ($polls as $poll) {\r\n         $poll_date = date(&#039;d\/m\/Y&#039;, $poll-&amp;gt;pollq_timestamp);\r\n         echo &#039;&amp;lt;div class=&amp;quot;poll&amp;quot;&amp;gt;&#039;;\r\n         echo &#039;&amp;lt;h4&amp;gt;Sondaggio \u2116&#039; . esc_html($poll_number) . &#039; (del &#039; . esc_html($poll_date) . &#039;)&amp;lt;\/h4&amp;gt;&#039;;\r\n         echo do_shortcode(&#039;&#x5B;poll id=&amp;quot;&#039; . intval($poll-&amp;gt;pollq_id) . &#039;&amp;quot;]&#039;);\r\n         echo &#039;&amp;lt;\/div&amp;gt;&amp;lt;br \/&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;br \/&amp;gt;&#039;;\r\n         $poll_number--;\r\n         }\r\n   }\r\n   else\r\n      {\r\n        echo &#039;&amp;lt;p&amp;gt;Nessun sondaggio attivo trovato.&amp;lt;\/p&amp;gt;&#039;;\r\n      }\r\n?&amp;gt;\r\n<\/pre>\n<p>\nDal punto di&nbsp;vista grafico, il&nbsp;risultato dipender&agrave; anche dalle regole CSS del vostro sito. Sul mio sito, per esempio, il&nbsp;risultato dello script di&nbsp;cui sopra <a href=\"https:\/\/eugigufo.net\/it\/pollsarchive\/activepolls\/\">appare cos&igrave;<\/a>:<br \/>\n<img decoding=\"async\" src=\"https:\/\/eugigufo.net\/images\/inerario\/art37wppollsallpolls01.jpg\" title=\"come vengono visualizzati tutti i sondaggi di questo sito\" border=\"0\"><br \/>\nE&nbsp;voi, ora, avete tutte le&nbsp;indicazioni fondamentali anche per fare questa visualizzazione con i&nbsp;contenuti e\/o la&nbsp;loro organizzazione diversi.<br \/>\nAh, una precisazione per i&nbsp;meno esperti: per creare una pagina del vostro sito con lo&nbsp;script appena visto, inserite quest&rsquo;ultimo nel file page.php del vostro tema WordPress, non dimenticatevi di&nbsp;indicare un&nbsp;Template Name, salvate con il&nbsp;nome che volete (per esempio, tuttisondaggi.php), caricate nella cartella del tema sul server e&nbsp;poi create la&nbsp;pagina attraverso la&nbsp;vostra admin.<br \/>\nPer esempio, il&nbsp;file tuttisondaggi.php del vostro tema WordPress potrebbe essere cos&igrave; (&egrave;&nbsp;solo un&nbsp;esempio per coloro che non sanno proprio dove inserire il&nbsp;codice!):<\/p>\n<pre class=\"brush: php; collapse: false; title: listing 5; notranslate\" title=\"listing 5\">\r\n&amp;lt;?php\r\n\/*\r\nTemplate Name: Tutti i sondaggi attivi\r\n*\/\r\n?&amp;gt;\r\n&amp;lt;?php get_header(); ?&amp;gt;\r\n   &amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;\r\n      &amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;\r\n         &amp;lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&amp;gt;\r\n         &amp;lt;h2 class=&amp;quot;singlepage&amp;quot;&amp;gt;&amp;lt;?php the_title(); ?&amp;gt;&amp;lt;\/h2&amp;gt;\r\n         &amp;lt;?php\r\n            global $wpdb;\r\n            $polls_table = $wpdb-&amp;gt;prefix . &#039;pollsq&#039;;\r\n            $polls = $wpdb-&amp;gt;get_results(&amp;quot;SELECT * FROM $polls_table WHERE pollq_active = 1 ORDER BY pollq_timestamp DESC&amp;quot;);\r\n            if ($polls) {\r\n                $poll_number = count($polls);\r\n            \tforeach ($polls as $poll) {\r\n                   $poll_date = date(&#039;d\/m\/Y&#039;, $poll-&amp;gt;pollq_timestamp);\r\n                   echo &#039;&amp;lt;div class=&amp;quot;poll&amp;quot;&amp;gt;&#039;;\r\n                   echo &#039;&amp;lt;h4&amp;gt;Sondaggio \u2116&#039; . esc_html($poll_number) . &#039; (del &#039; . esc_html($poll_date) . &#039;)&amp;lt;\/h4&amp;gt;&#039;;\r\n                   echo do_shortcode(&#039;&#x5B;poll id=&amp;quot;&#039; . intval($poll-&amp;gt;pollq_id) . &#039;&amp;quot;]&#039;);\r\n                   echo &#039;&amp;lt;\/div&amp;gt;&amp;lt;br \/&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;br \/&amp;gt;&#039;;\r\n                   $poll_number--;\r\n                }\r\n            }\r\n            else { echo &#039;&amp;lt;p&amp;gt;Nessun sondaggio attivo trovato.&amp;lt;\/p&amp;gt;&#039;; }\r\n         ?&amp;gt;\r\n                  &amp;lt;?php endwhile; endif; ?&amp;gt;\r\n                  &amp;lt;?php comments_template(); ?&amp;gt;\r\n\t\t&amp;lt;\/div&amp;gt;\r\n\t\t&amp;lt;!-- end content div--&amp;gt;\r\n\t\t&amp;lt;?php get_sidebar(&#039;&#039;); ?&amp;gt;\r\n&amp;lt;\/div&amp;gt;\r\n&amp;lt;!-- end the main div--&amp;gt;\r\n&amp;lt;\/div&amp;gt;\r\n&amp;lt;!-- end wrapper div --&amp;gt;\r\n&amp;lt;?php get_footer(); ?&amp;gt;\r\n<\/pre>\n<p>\nMentre sulla vostra admin di&nbsp;WordPress, creando la&nbsp;pagina, dovrete solo indicare il&nbsp;titolo della pagina, il&nbsp;suo modello (coincide con il&nbsp;Template Name che avete scritto nel codice) e&nbsp;l&rsquo;eventuale pagina-genitore.<br \/>\nSi&nbsp;pu&ograve; pubblicare!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il paragrafo dell\u2019\u201cInerario\u201d che spiega come visualizzare automaticamente tutti i sondaggi attivi esistenti (ovviamente su un determinato sito) creati con il plugin WP Polls.<br \/>\nQuesto paragrafo \u00e8 stato pensato sia per gli sviluppatori \u201cpigri\u201d che per i semplici amministratori o proprietari dei siti web che non si intendono della programmazione per il web.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":452,"menu_order":37,"comment_status":"open","ping_status":"closed","template":"inerarioart.php","meta":{"footnotes":""},"class_list":["post-11450","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/eugigufo.net\/it\/wp-json\/wp\/v2\/pages\/11450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eugigufo.net\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/eugigufo.net\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/eugigufo.net\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eugigufo.net\/it\/wp-json\/wp\/v2\/comments?post=11450"}],"version-history":[{"count":0,"href":"https:\/\/eugigufo.net\/it\/wp-json\/wp\/v2\/pages\/11450\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/eugigufo.net\/it\/wp-json\/wp\/v2\/pages\/452"}],"wp:attachment":[{"href":"https:\/\/eugigufo.net\/it\/wp-json\/wp\/v2\/media?parent=11450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}