RSSフィードの末尾にタイトルが表示される件の対応

Pocket

WordPressのデフォルトテーマであるtwentyfifteenのフィードについて。descriptionに、勝手にタイトルが追加されていた。
ひょっとしたらtwentytwelve辺りから似たような現象がおきていたのかもしれない。
 
<span class=”screen-reader-text”>記事のタイトル</span>
のように。このscreen-reader-text クラスで指定されている個所は、通常はcssで隠されているから表示されない。でもrssで読むと表示されちゃうから、醜い見にくいfeedになる。これを消したい。
さらに、Google SEO by Yoastでも、デフォルトの設定では、勝手に追記しやがる。
高度な設定_-_WordPress_SEO_by_Yoast_‹_Daily_GLOCALISM_—_WordPress
まあ、わかるけどさ。和訳が酷すぎていみわからなかったよ。これは、この個所を消せば消える。
 
さて、feedにあるscreen-reader-textの部分を消す方法だが、the_excerpt_rss filterを使えば簡単。ごっそり<span>でくくられた個所を消しちゃうには以下

add_filter( 'the_excerpt_rss', 'myrss', 1, 10 );//$output );
function myrss($string){
    $string = preg_replace('@<(w+)b.*?>.*?</1>@si', '', $string);
// #    $string_formatted = preg_replace('/(<pre>)(.*)(</pre>)/eis', "'<span style="color:red">' . '$1' . '$2' . '$3' . '</span>'", $string_original);
//     $string = preg_replace('/<span[^>]*>(.*?)<\/span>/i', '\1', $string);
    $string = strip_tags_content( $string, '<span>');
    return $string;
}
function strip_tags_content($text, $tags = '', $invert = FALSE) {
  preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags);
  $tags = array_unique($tags[1]);
  if(is_array($tags) AND count($tags) > 0) {
    if($invert == FALSE) {
      return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text);
    }
    else {
      return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text);
    }
  }
  elseif($invert == FALSE) {
    return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
  }
  return $text;
}

RSSフィードに妙なものがついていたら確認してみてください。

この記事を書いた人