Das Problem, daß Smileys nicht ersetzt werden, tritt leider auch auf, wenn Smileys direkt vor Interpunktionszeichen wie '.', ',', etc. stehen.
Folgender Patch in der Datei functions.php (im Verzeichnis wp-includes) schafft hier Abhilfe (ab Zeile 1916 in der Version 2.6.2):
$siteurl = get_option( 'siteurl' );
// Capture smilies before punctuation characters as well
foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
// $wp_smiliessearch[] = '/(\s|^)' . preg_quote( $smiley, '/' ) . '(\s|$)/';
$wp_smiliessearch[] = '/(\s|^)' . preg_quote( $smiley, '/' ) . '(\s|$)/';
$smiley_masked = attribute_escape( trim( $smiley ) );
$wp_smiliesreplace[] = " <img src='$siteurl/wp-includes/images/smilies/$img' alt='$smiley_masked' class='wp-smi\ley' />";
durch
// Capture smilies before punctuation characters as well
$delim = preg_quote ('.:-),', '/');
foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
// $wp_smiliessearch[] = '/(\s|^)' . preg_quote( $smiley, '/' ) . '(\s|$)/';
$wp_smiliessearch[] = '/(\s|^)' . preg_quote( $smiley, '/' ) . '([' . $delim . ']|\s|$)/';
$smiley_masked = attribute_escape( trim( $smiley ) );
$wp_smiliesreplace[] = " <img src='$siteurl/wp-includes/images/smilies/$img' alt='$smiley_masked' class='wp-smi\ley' />" . '\2';
ersetzen.
Der Patch bewirkt, daß der preg_replace-Aufruf in der eigentlichen Ersetzung (formatting.php, Zeile 722) auch bei besagten Interpunktion-Zeichen greift. Wichtig hierbei ist die Backward-Reference '\2' im Replacement-String; wenn sie fehlt, wird das ursprüngliche Interpunktionszeichen aufrund des erfolgreichen Matchens unterschlagen.
Auch in diesem Forum könnte der Patch Wunder bewirken :-).