Content filteren met KSES of REGEX

Ik ben lui. Ik wil snel en simpel links kunnen dumpen en dan weer doorsurfen. De PressThis bookmarklet (onder Tools in de backend) werkt op zich prima, maar plakt de URL in de content. Dat is me te ver weg voor een link. Een link heeft een titel en een URL, maar standaard verwijst de titel van een post door naar de post zelf. Aangezien er geen aanvullende content is kan dit best de externe link zijn. Dat klikt handig weg en maakt een links-pagina relatief makkelijk. Dus de opdracht is simpel:

Extraheer de URL uit de content en vervang de permalink van post-format ‘link’ door deze externe URL.

In eerste instantie was ik op zoek naar een oplossing met Regular Expressions. RegEx is bedoeld om programmeertaal-onafhankelijke patronen te definieren. Vervolgens kun je hier mee zoeken, vervangen, enzovoorts. Klinkt goed, maar het vraagt enig abstractie-niveau.

$pattern = '#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#';

Mocht bovenstaande duidelijk voor je zijn check dan vooral de verschillende oplossingen met behulp van RegEx eens. Ik kies voor een andere oplossing: KSES.

KSES staat voor “kses strips evil scripts” en is een filter voor HTML. WordPress gebruikt het standaard om comments te filteren. Otto legt het verder heel goed uit in zijn post http://ottopress.com/2010/wp-quickie-kses/

De volgende functie vervangt de Permalink door de URL in de content:

function change2href ( $permalink ) {      global $post;      if (has_post_format ( 'link' )) {        if ( preg_match_all('/<a (.+?)>/',  $post->post_content, $matches) ) {              foreach ($matches[1] as $match) {                  foreach ( wp_kses_hair ($match, array ('http') ) as $attr) $a [$attr['name']] = $attr['value']; $permalink = $a['href'];                      }              }          return $permalink;          }     else {          return $permalink;          }      }      add_filter ('the_permalink','change2href');

Overigens is een ander veelgebruikte oplossing het vervangen van de permalink door een custom field. Zij voor een voorbeeld WPrecipes.com

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>