vernal pool

Mittineague

WordPress widgets.php Hack

There are no plants in blossom on February the 3rd.
The earliest date currently listed is Mar 15, and the latest date is Nov 11
If you are looking for a way to stop RSS feeds with a character encoding different than your WordPress blog's character encoding from causing validation errors, please see rss.php Hack 1

This hack stops feeds in the WordPress sidebar feed widgets that have different character encodings from causing non-valid mark-up.

I say "hack" because this is NOT a plugin, but involves direct modification of the widgets.php file. If you try this, Please be Sure to Save a Back-up of the original file.

Important* Note* This hack requires the iconv function. From the PHP documentation:

To use functions provided by this module, the PHP binary must be built with the following configure line: --with-iconv[=DIR].

Also, if you are on a Windows or IBM server, or the results are not what you expect, Please read the documentation (actually, it's not a bad idea to read it anyway).

Open the content/plugins/widgets/widgets.php file.

In the widget_rss function find this section of code:

<?php
//php tags needed for highlighter
//.............................
 
      } else {
        $desc = str_replace(array("\n", "\r"), ' ', wp_specialchars(strip_tags(html_entity_decode($item['description'], ENT_QUOTES)), 1));
        $summary = '';
      }
 
//.............................
?>

After the line with the closing curly brace add:

<?php
//php tags needed for highlighter
//.............................
 
      $feed_char_enc = $rss->feed_encoding;
      $board_char_enc = get_bloginfo('charset');
      if($feed_char_enc != $board_char_enc)
      {
        $conv_link = iconv($feed_char_enc, "$board_char_enc//IGNORE", $link);
        $conv_desc = iconv($feed_char_enc, "$board_char_enc//IGNORE", $desc);
        $conv_title = iconv($feed_char_enc, "$board_char_enc//IGNORE", $title);
        $conv_summary = iconv($feed_char_enc, "$board_char_enc//IGNORE", $summary);
        $link = ($conv_link != FALSE) ? $conv_link : $link;
        $desc = ($conv_desc != FALSE) ? $conv_desc : $desc;
        $title = ($conv_title != FALSE) ? $conv_title : $title;
        $summary = ($conv_summary != FALSE) ? $conv_summary : $summary;
      }
 
//.............................
?>

Which will now be before this line:

<?php
//php tags needed for highlighter
//.............................
 
      echo "<li><a class='rsswidget' href='$link' title='$desc'>$title</a>$summary</li>";
 
//.............................
?>

Notice that for the "out charset" I appended the "//IGNORE" string. This removes any characters that can't be converted. This is not entirely desirable, but using the default will result in the converted strings being terminated at the last valid character. A third option is to append the string "//TRANSLIT" instead. You may want to try it, but I found that the converted strings still caused non-valid mark-up.

About - Blog - Sitemap - Contact - Forums - Home 

PHP icon. PEAR icon. MySQL icon. phpBB icon. Sitepoint icon. Valid XHTML 1.0 icon. Valid CSS! icon. Level A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0