Commenti avanzati in WordPress

Molte piattaforme di blogging permettono agli utenti di inserire immagini nei propri commenti. WordPress sembra invece non permetterlo – immagino per evitare messaggi pubblicitari. E se volessimo dare ai nostri lettori la possibilità di inserire delle immagini o semplicemente qualche opzione di formattazione un po’ più avanzata?

Questo “trucco” è per chi ha installato su un proprio sito una versione di WordPress. La procedura non è difficile: bisogna aprire l’editor del tema e modificare il file delle funzioni “functions.php”. Alla fine del file ci dovrebbe essere il simbolo “?>” che indica la fine del codice php. Distanziamo con qualche ritorno a capo ed incolliamo il codice:

add_action(‘init’, ‘my_html_tags_code’, 10);
function my_html_tags_code() {
  define(‘CUSTOM_TAGS’, true);
  global $allowedtags, $allowedposttags, $allowedentitynames;

        $allowedposttags = array(
            ’address’ => array(),
            ’a’ => array(
                  ’class’ => array (),
                  ’href’ => array (),
                  ’id’ => array (),
                  ’title’ => array (),
                  ’rel’ => array (),
                  ’rev’ => array (),
                  ’name’ => array (),
                  ’target’ => array()),
            ’abbr’ => array(
                  ’class’ => array (),
                  ’title’ => array ()),
            ’acronym’ => array(
                  ’title’ => array ()),
            ’article’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’aside’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’b’ => array(),
            ’big’ => array(),
            ’blockquote’ => array(
                  ’id’ => array (),
                  ’cite’ => array (),
                  ’class’ => array(),
                  ’lang’ => array(),
                  ’xml:lang’ => array()),
            ’br’ => array (
                  ’class’ => array ()),
            ’button’ => array(
                  ’disabled’ => array (),
                  ’name’ => array (),
                  ’type’ => array (),
                  ’value’ => array ()),
            ’caption’ => array(
                  ’align’ => array (),
                  ’class’ => array ()),
            ’cite’ => array (
                  ’class’ => array(),
                  ’dir’ => array(),
                  ’lang’ => array(),
                  ’title’ => array ()),
            ’code’ => array (
                  ’style’ => array()),
            ’col’ => array(
                  ’align’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’span’ => array (),
                  ’dir’ => array(),
                  ’style’ => array (),
                  ’valign’ => array (),
                  ’width’ => array ()),
            ’del’ => array(
                  ’datetime’ => array ()),
            ’dd’ => array(),
            ’details’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’open’ => array (),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’div’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array()),
            ’dl’ => array(),
            ’dt’ => array(),
            ’em’ => array(),
            ’fieldset’ => array(),
            ’figure’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’figcaption’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’font’ => array(
                  ’color’ => array (),
                  ’face’ => array (),
                  ’size’ => array ()),
            ’footer’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’form’ => array(
                  ’action’ => array (),
                  ’accept’ => array (),
                  ’accept-charset’ => array (),
                  ’enctype’ => array (),
                  ’method’ => array (),
                  ’name’ => array (),
                  ’target’ => array ()),
            ’h1′ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h2′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h3′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h4′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h5′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h6′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’header’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’hgroup’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’hr’ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’noshade’ => array (),
                  ’size’ => array (),
                  ’width’ => array ()),
            ’i’ => array(),
            ’img’ => array(
                  ’alt’ => array (),
                  ’align’ => array (),
                  ’border’ => array (),
                  ’class’ => array (),
                  ’height’ => array (),
                  ’hspace’ => array (),
                  ’longdesc’ => array (),
                  ’vspace’ => array (),
                  ’src’ => array (),
                  ’style’ => array (),
                  ’width’ => array ()),
            ’ins’ => array(
                  ’datetime’ => array (),
                  ’cite’ => array ()),
            ’kbd’ => array(),
            ’label’ => array(
                  ’for’ => array ()),
            ’legend’ => array(
                  ’align’ => array ()),
            ’li’ => array (
                  ’align’ => array (),
                  ’class’ => array ()),
            ’menu’ => array (
                  ’class’ => array (),
                  ’style’ => array (),
                  ’type’ => array ()),
            ’nav’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’p’ => array(
                  ’class’ => array (),
                  ’align’ => array (),
                  ’dir’ => array(),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array()),
            ’pre’ => array(
                  ’style’ => array(),
                  ’width’ => array ()),
            ’q’ => array(
                  ’cite’ => array ()),
            ’s’ => array(),
            ’span’ => array (
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’align’ => array (),
                  ’lang’ => array (),
                  ’style’ => array (),
                  ’title’ => array (),
                  ’xml:lang’ => array()),
            ’section’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’strike’ => array(),
            ’strong’ => array(),
            ’sub’ => array(),
            ’summary’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’sup’ => array(),
            ’table’ => array(
                  ’align’ => array (),
                  ’bgcolor’ => array (),
                  ’border’ => array (),
                  ’cellpadding’ => array (),
                  ’cellspacing’ => array (),
                  ’class’ => array (),
                  ’dir’ => array(),
                  ’id’ => array(),
                  ’rules’ => array (),
                  ’style’ => array (),
                  ’summary’ => array (),
                  ’width’ => array ()),
            ’tbody’ => array(
                  ’align’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’valign’ => array ()),
            ’td’ => array(
                  ’abbr’ => array (),
                  ’align’ => array (),
                  ’axis’ => array (),
                  ’bgcolor’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’class’ => array (),
                  ’colspan’ => array (),
                  ’dir’ => array(),
                  ’headers’ => array (),
                  ’height’ => array (),
                  ’nowrap’ => array (),
                  ’rowspan’ => array (),
                  ’scope’ => array (),
                  ’style’ => array (),
                  ’valign’ => array (),
                  ’width’ => array ()),
            ’textarea’ => array(
                  ’cols’ => array (),
                  ’rows’ => array (),
                  ’disabled’ => array (),
                  ’name’ => array (),
                  ’readonly’ => array ()),
            ’tfoot’ => array(
                  ’align’ => array (),
                  ’char’ => array (),
                  ’class’ => array (),
                  ’charoff’ => array (),
                  ’valign’ => array ()),
            ’th’ => array(
                  ’abbr’ => array (),
                  ’align’ => array (),
                  ’axis’ => array (),
                  ’bgcolor’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’class’ => array (),
                  ’colspan’ => array (),
                  ’headers’ => array (),
                  ’height’ => array (),
                  ’nowrap’ => array (),
                  ’rowspan’ => array (),
                  ’scope’ => array (),
                  ’valign’ => array (),
                  ’width’ => array ()),
            ’thead’ => array(
                  ’align’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’class’ => array (),
                  ’valign’ => array ()),
            ’title’ => array(),
            ’tr’ => array(
                  ’align’ => array (),
                  ’bgcolor’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’class’ => array (),
                  ’style’ => array (),
                  ’valign’ => array ()),
            ’tt’ => array(),
            ’u’ => array(),
            ’ul’ => array (
                  ’class’ => array (),
                  ’style’ => array (),
                  ’type’ => array ()),
            ’ol’ => array (
                  ’class’ => array (),
                  ’start’ => array (),
                  ’style’ => array (),
                  ’type’ => array ()),
            ’var’ => array ());

      /**
       * Kses allowed HTML elements.
       *
       * @global array $allowedtags
       * @since 1.0.0
       */
      $allowedtags = array(
            ’a’ => array(
                  ’href’ => array (),
                  ’title’ => array ()),
            ’abbr’ => array(
                  ’title’ => array ()),
            ’acronym’ => array(
                  ’title’ => array ()),
            ’b’ => array(),
            ’blockquote’ => array(
                  ’cite’ => array ()),
            //      ’br’ => array(),
            ’cite’ => array (),
            ’code’ => array(),
            ’del’ => array(
                  ’datetime’ => array ()),
            //      ’dd’ => array(),
            //      ’dl’ => array(),
            //      ’dt’ => array(),
            ’em’ => array (), ‘i’ => array (),
            //      ’ins’ => array(‘datetime’ => array(), ‘cite’ => array()),
            //      ’li’ => array(),
            //      ’ol’ => array(),
            //      ’p’ => array(),
            ’q’ => array(
                  ’cite’ => array ()),
            ’strike’ => array(),
            ’strong’ => array(),
            ’sub’ => array(),
            ’sup’ => array(),
            ’img’ => array(
                  ’alt’ => array (),
                  ’align’ => array (),
                  ’border’ => array (),
                  ’class’ => array (),
                  ’height’ => array (),
                  ’hspace’ => array (),
                  ’longdesc’ => array (),
                  ’vspace’ => array (),
                  ’src’ => array (),
                  ’style’ => array (),
                  ’width’ => array ()),
            ’span’ => array(
                  ’style’ => array ()),
            //      ’u’ => array(),
            //      ’ul’ => array(),
      );

      $allowedentitynames = array(
            ’nbsp’,    ’iexcl’,  ’cent’,    ’pound’,  ’curren’, ‘yen’,
            ’brvbar’,  ’sect’,   ‘uml’,     ‘copy’,   ‘ordf’,   ‘laquo’,
            ’not’,     ‘shy’,    ’reg’,     ‘macr’,   ‘deg’,    ’plusmn’,
            ’acute’,   ‘micro’,  ’para’,    ’middot’, ‘cedil’,  ’ordm’,
            ’raquo’,   ‘iquest’, ‘Agrave’,  ’Aacute’, ‘Acirc’,  ’Atilde’,
            ’Auml’,    ’Aring’,  ’AElig’,   ‘Ccedil’, ‘Egrave’, ‘Eacute’,
            ’Ecirc’,   ‘Euml’,   ‘Igrave’,  ’Iacute’, ‘Icirc’,  ’Iuml’,
            ’ETH’,     ‘Ntilde’, ‘Ograve’,  ’Oacute’, ‘Ocirc’,  ’Otilde’,
            ’Ouml’,    ’times’,  ’Oslash’,  ’Ugrave’, ‘Uacute’, ‘Ucirc’,
            ’Uuml’,    ’Yacute’, ‘THORN’,   ‘szlig’,  ’agrave’, ‘aacute’,
            ’acirc’,   ‘atilde’, ‘auml’,    ’aring’,  ’aelig’,  ’ccedil’,
            ’egrave’,  ’eacute’, ‘ecirc’,   ‘euml’,   ‘igrave’, ‘iacute’,
            ’icirc’,   ‘iuml’,   ‘eth’,     ‘ntilde’, ‘ograve’, ‘oacute’,
            ’ocirc’,   ‘otilde’, ‘ouml’,    ’divide’, ‘oslash’, ‘ugrave’,
            ’uacute’,  ’ucirc’,  ’uuml’,    ’yacute’, ‘thorn’,  ’yuml’,
            ’quot’,    ’amp’,    ’lt’,      ’gt’,     ‘apos’,   ‘OElig’,
            ’oelig’,   ‘Scaron’, ‘scaron’,  ’Yuml’,   ‘circ’,   ’tilde’,
            ’ensp’,    ’emsp’,   ‘thinsp’,  ’zwnj’,   ‘zwj’,    ’lrm’,
            ’rlm’,     ‘ndash’,  ’mdash’,   ‘lsquo’,  ’rsquo’,  ’sbquo’,
            ’ldquo’,   ‘rdquo’,  ’bdquo’,   ‘dagger’, ‘Dagger’, ‘permil’,
            ’lsaquo’,  ’rsaquo’, ‘euro’,    ’fnof’,   ‘Alpha’,  ’Beta’,
            ’Gamma’,   ‘Delta’,  ’Epsilon’, ‘Zeta’,   ‘Eta’,    ’Theta’,
            ’Iota’,    ’Kappa’,  ’Lambda’,  ’Mu’,     ‘Nu’,     ‘Xi’,
            ’Omicron’, ‘Pi’,     ‘Rho’,     ‘Sigma’,  ’Tau’,    ’Upsilon’,
            ’Phi’,     ‘Chi’,    ’Psi’,     ‘Omega’,  ’alpha’,  ’beta’,
            ’gamma’,   ‘delta’,  ’epsilon’, ‘zeta’,   ‘eta’,    ’theta’,
            ’iota’,    ’kappa’,  ’lambda’,  ’mu’,     ‘nu’,     ‘xi’,
            ’omicron’, ‘pi’,     ‘rho’,     ‘sigmaf’, ‘sigma’,  ’tau’,
            ’upsilon’, ‘phi’,    ’chi’,     ‘psi’,    ’omega’,  ’thetasym’,
            ’upsih’,   ‘piv’,    ’bull’,    ’hellip’, ‘prime’,  ’Prime’,
            ’oline’,   ‘frasl’,  ’weierp’,  ’image’,  ’real’,   ‘trade’,
            ’alefsym’, ‘larr’,   ‘uarr’,    ’rarr’,   ‘darr’,   ‘harr’,
            ’crarr’,   ‘lArr’,   ‘uArr’,    ’rArr’,   ‘dArr’,   ‘hArr’,
            ’forall’,  ’part’,   ‘exist’,   ‘empty’,  ’nabla’,  ’isin’,
            ’notin’,   ‘ni’,     ‘prod’,    ’sum’,    ’minus’,  ’lowast’,
            ’radic’,   ‘prop’,   ‘infin’,   ‘ang’,    ’and’,    ’or’,
            ’cap’,     ‘cup’,    ’int’,     ‘sim’,    ’cong’,   ‘asymp’,
            ’ne’,      ’equiv’,  ’le’,      ’ge’,     ‘sub’,    ’sup’,
            ’nsub’,    ’sube’,   ‘supe’,    ’oplus’,  ’otimes’, ‘perp’,
            ’sdot’,    ’lceil’,  ’rceil’,   ‘lfloor’, ‘rfloor’, ‘lang’,
            ’rang’,    ’loz’,    ’spades’,  ’clubs’,  ’hearts’, ‘diams’,
      );
}

Una volta salvata la modifica non facciamo altro che bypassare il controllo che wordpress fa automaticamente sul contenuto dei commenti e dei post aggiungendo, oltre ai tag già permessi, qualche altro tag in più. Ad esempio, io ho aggiunto le immagini ( <img> ), il testo in apice ( <sup> ) ed il testo in pedice ( <inf> ). Provare per credere.

Per aggiungere altri tag basta modificare la stringa chiamata “$allowedtags” sulla falsa riga dei tag già esistenti. Se, ad esempio, voglio aggiungere la possibilità di inserire dei ( <div> ) mi basterà aggiungere:

            ’div’ => array(
                  ’style’ => array ()),

Attenzione però a non esagerare perché un utente malintenzionato potrebbe approfittare della vostra generosità verso i vostri lettori ed inserire codice malevolo.
Buon divertimento.

Share