別エントリーにて記述。
前回のエントリー本文をインデントするHookの直後に記述すると、追記部分の<p><a class="more-link">
を<p class="continue"><a>
に置き換えたり、Visualエディタ使用時に出来る空要素を消去するHookを書いてみた。
Visualエディタに関しては、正直追いきれない部分もあるので、多少は多めに見るとする。
/**
* エントリー本文の追記情報を置換します。
*/
function replace_entry_body($content) {
// インデント数 (div.textBody から見て)
$indent = '4';
if ($indent != '') {
$indent = (int) $indent;
for ($i = 0; $i < $indent; $i ++)
$indentText .= "\\t";
} else {
$indentText = "\\t\\t\\t\\t";
}
// エントリータイトルを取得
$entry_title = get_the_title();
// <p><a class="more-link">を<p class="continue"><a>に置き換える (href="hoge#more-**"を、href="hoge#more**"に置換)
$content = preg_replace('/<p(\\s.+?=".+?">|>)\\s?<a href="(.+?)#more-([0-9]+?)" class="more-link">(.+?)<\\/a><\\/p>/', '<p class="continue"><a href="\\2#more\\3" title="' . $entry_title . ' 全文を読む" rel="nofollow">\\4</a></p>', $content);
// <a id="more-**">を<div class="textBody" id="more**">に置き換える
$content = preg_replace('/\\t<p(\\s.+?=".+?">|>)<a id="more-([0-9]+?)"><\\/a>(.*?)<\\/p>/', "</div>\\n$indentText<div class=\\"textBody\\" id=\\"more\\\\2\\">\\n$indentText\\t<p\\\\1\\\\3</p>", $content);
// <p></p>, <p class="hoge"></p>, <p> </p>, <p class="hoge"> </p>などを置換
$content = preg_replace('/\\t+<p(\\s.+?=".+?">|>)( )*?<\\/p>\\n/', '', $content);
// <p>\\n, <p class="hoge">\\nなどを置換
$content = preg_replace('/\\t+<p(\\s.+?=".+?">|>)\\n/', '', $content);
return $content;
}
add_action('the_content', replace_entry_body, 100);
上のコードを、functions.php内のエントリー本文をインデントするHookの直後に記述すればOK!
- Newer: コメント/トラックバック本文をインデントするHook
- Older: WPのパーマリンクのURIを年/月/日/時間にする
Comments: 0
Trackback+Pingback: 0
- TrackBack URL for this entry
- http://miniturbo.org/memo/2007/04/03/125411/trackback/
- Listed below are links to weblogs that reference
- エントリー本文の追記情報を置換するHook from miniturbo::Memo