Dougal Campbell's geek ramblings

WordPress, web development, and world domination.

Text Filter Suite

Description

The Text Filter Suite (“TFS”, hereafter) is a WordPress plugin which
adds some new text filtering functions. In a sense, the core TFS
functions could be considered a “meta filter”, because they actually
provide a framework that let you construct new filters fairly easily.
They also provide an easy way to apply filters to post content and
comments on a per-post basis.

Huh? Can you repeat that in English?

Okay, let’s try a real-world example. A common feature on many web
sites is the automatic handling of acronyms. You’ll often see an
acronym such as “XHTML” displayed in an alternate style, and when you
hover your mouse pointer over it, you get a tool-tip which displays the
definition (“eXtended HyperText Markup Language”, in this case). You
don’t want to have to type in the markup for this every time you post
something, and automation is what computers are for, right? So, there
are several plugins available to handle this sort of automated text
subsitution.

TFS comes with the “TFS Acronymit” plugin to perform this function.
It’s based on Matt Mullenweg’s original “Acronymit” function, but with
a couple of improvements. In Matt’s original function, you had to keep
the acronym list sorted, longest-to-shortest, and it could get confused
by recursive acronyms like ‘PHP’ (“PHP Hyptertext Processor”) or GNU
(“GNU’s Not Unix”). TFS Acronymit does not have those restrictions.

For those who think that expansion of technical acronyms is “teh sux0r”
(i.e. “boring”), TFS comes with a variety of more entertaining filters.
The current set includes “chef”, “fudd”, “jive”, “kraut”, “pirate”, and
of course, the aforementioned “acronymit”. As a word of caution, the
“jive” and “kraut” filters are not what you would call “politically
correct”.
By default, if the “TFS Pirate” filter is active, it will automatically
apply itself to all content on Talk Like a Pirate Day (September 19).
If you do not want this filter to automatically activate, set the value
of the “$talk_like_a_pirate” variable at the top of the plugin source
to “false”.

The “TFS Acronymit” filter is automatically applied to all posts
whenever it is active. You do not need to set special post custom
fields in order to use it. Just activate the plugin, and you’re ready.
To modify which acronyms are defined, see the list at the beginning of
the plugin, and modify it as you like, following the format you see
there.

It is possible to use the TFS core without activating any additional
plugins. You can do this with any built-in PHP function accepts a
single string as a parameter and returns a string. For example, you
could set a post custom “content_filter” with the value “strrev”, and
the contents of the post would be displayed backwards, or with a value
of “strtoupper” to convert the content to all uppercase text.

You can only specify a single function in each post custom field.
However, you can chain multiple functions together by using the key
more than once. For instance, if you wanted all comments for a post to
display in uppercase Elmer Fudd text, you would set two post custom
fields:

comment_filter = strtoupper
comment_filter = fudd

HOWEVER, note that using PHP built-in functions in this way will bypass
the power of the filter_cdata_content() function, which means that it
can and will mangle your HTML tags, possibly rendering them useless.
For example, applying the strrev function to the string “

<

p>” will
transform it into “>p<“, which will confuse your browser in new and
wonderful ways.

NOTE: These filters can be very CPU intensive. For one thing, they make
extensive use of regular expressions, which can be expensive on their own.
And for another, they break your content into many small chunks, in order to
separate the filterable text from the HTML code, and the filters run
separately on each text chunk found. This probably won’t be a problem in
most cases. But if you have long posts being filtered, and you get a lot of
traffic, it could start to add up. A caching plugin (e.g., WP Super Cache,
or W3 Total Cache) would probably help in that case.

The Future

I will one day release a version 2.0 of this plugin which will be completely
refactored. You can probably expect to see:
* Consolidate the code so that it is not a collection of separately-enabled
mini-plugins.
* PHP5 OOP architecture to encapsulate everything.
* An actual admin interface to select which filters are enabled, which
bits of content you will allow to be filtered (post titles, post content, comments,
blog title, widget titles, etc), whether to auto-activate the Pirate
filter on Talk Like a Pirate Day, etc.

Eventually, there may also be a way to edit the string substitutions so that
you can tailor it to your tastes.

Credits

I created TFS on my own, but I borrowed ideas from several sources. Here are
some links you might also want to check out:

PhotoMatt's original Acronymit code:
  http://photomatt.net/scripts/acronymit

Simon Willison and I traded some ideas when I started my original hack
for Talk Like a Pirate Day, in 2003:
  http://simon.incutio.com/archive/2003/09/19/aaar

I borrowed, modified, and mangled a ton of stuff from Adam Kalsey's
"MovableJive" plugin for Movable Type. See tfs-jive, tfs-chef, tfs-fudd,
and tfs-kraut.
  http://kalsey.com/2003/02/movablejive/

If all you want to do is stuff like the acronym definitions (or similar
"turn this shorthand into a tag" substitions), then Michel Valdrighi's
"Tag, You're It" plugin is really a better solution:
  http://zengun.org/weblog/archives/2004/05/tag-you-re-it

The original inspiration that led to TFS was my desire to apply a
"pirate" filter on my blog for "Talk Like a Pirate Day", which is on
September 19 of each year:
  http://talklikeapirate.com/

Changelog

1.4 – 2015-06-03

  • Added ‘?filter=foo’ URL option back in, with a whitelist of allowed
    functions.

1.3 – 2012-09-18

  • Fixed PHP opening shorttag in tfs-acroymit.php
  • Eliminated PHP warnings in debug mode
  • Removed all closing ?> php tags per WP standards
  • Killed generic ‘filter’ $_REQUEST variable checking

1.2 – 2010-12-10

  • Added this changelog to the readme
  • Moved the is_feed() handling into the init, to avoid breaking in
    WordPress 3.1.
  • Added notes about the filters being CPU intensive.

About Dougal Campbell

Dougal is a web developer, and a “Developer Emeritus” for the WordPress platform. When he’s not coding PHP, Perl, CSS, JavaScript, or whatnot, he spends time with his wife, three children, a dog, and a cat in their Atlanta area home.

Bookmark the permalink.

21 Responses to Text Filter Suite

  1. Pingback: Make Your WordPress Site Talk Like a Pirate - Dougal Campbell's geek ramblings

  2. Pingback: Yarrr! Talk Like a Pirate Day Is Almost Upon Us! - Dougal Campbell's geek ramblings

  3. Pingback: Dougal Campbell: Yarrr! Talk Like a Pirate Day Is Almost Upon Us!

  4. I love this Plugin. I use it as a demonstration for my students on the possible in WordPress Plugins and it triggers their imagination. Well, it isn’t working this quarter. Caught me completely off-guard.

    It’s been modularized, and we’ve activated the core plus a language filter, and it isn’t working on our test sites.

    We are using these on InstantWP installations, so is it calling from an API or something?

    I was so disappointed to not have it dazzle the students. 🙁 If you could help me figure out if it is an InstantWP issue or the Plugin needs updating, I would appreciate it. Thanks!

  5. I found one solution: Each post must use the custom field to activate it. ARGGGG.

    Is there a global setting?

  6. Ah, looking back, I see that I removed the ?filter=foo feature, because I was afraid it might be a security issue. I’ll do a new release, add it back in, with a whitelist of allowed functions.

  7. Can’t find the setting? Found the filter added but can’t find how to activate it for the whole site. These folks are brilliant but we’re not even close to covering custom functions. 😀

    And I’m showing off this post to them, so say hi to a whole bunch of newbies learning WordPress in college for their future careers (and degree programs). WAVE!

  8. Hello, students!

    There’s no settings. It’s always been a simple plugin. You can manually filter any given page by adding, for example, ?filter=pirate to the URL. But here’s some easy access links:

    pirate
    chef
    fudd

    One day I’ll rewrite this thing, merge the pieces, and give it proper settings.

  9. Lisa Presley says:

    @dougal…hi! From Lorelle’s class… *WAVE* Thanks for fixing this for us. You have made Lorelle a very happy camper!

  10. Drew Telegin says:

    You made Lorelle’s day and she told us how helpful you have been! Thanks! *WAVE*

  11. *Waving Back* Hey there! Thanks the fix so we can see your cool plugin in action.

  12. I’m just glad to see that somebody can learn something from my silly plugin!

  13. Dustin Bronn says:

    Thank you very much for fixing

Leave a Reply to Lisa Presley Cancel reply

%d bloggers like this: