WordPressのmore=続きを読むで#以下のリンクラベルを削除する

WordPressの標準テーマに用意されている記事一覧を表示するページ(トップページやカテゴリページ)では、記事が「<!--more-->」で分割されていると、その前方のみを表示し、続きを読むというリンクを生成してくれる。

このリンクには、ページ遷移した際に「<!--more-->」の続きから表示されるように「#」のラベルが付与されている。これはこれで丁寧な機能ではあるが、比較的短い記事を作成することが多いサイトではページ遷移の度にちょっとスクロールしてしまい、鬱陶しいと感じることもあるだろう。

該当Aタグのhrefから#以下を削除したい場合には、フィルタが用意されているのでこれで処理しておくのがいいだろう。以下該当コード部分。

 $output .= apply_filters( 'the_content_more_link', ' <a href="' . get_permalink() . "#more-{$post->ID}\" class=\"more-link\">$more_link_text</a>", $more_link_text );

つまりthe_content_more_linkのフィルタを追加すれば良い。したがって、function.phpに登録するフィルタは以下のようになる。

add_filter('the_content_more_link', function($html) {
	$html = preg_replace('/\s*#[^"]*/', '', $html);
	return $html;
});

ちなみに、get_permalink()にはちょっと別な問題があって、リンク部に空白が入ってきてしまうことを確認している(原因は特定していないがDBのパーマリンクデータカラムの末尾に生空白文字が入ってしまうことがあるのだろう。3.8.1で確認)。そこでフィルタ的にザックリと空白も\s*で削除している。