Home > archives > エントリー本文の追記情報を置換するHook

エントリー本文の追記情報を置換するHook

別エントリーにて記述。
前回のエントリー本文をインデントする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>&nbsp;</p>, <p class="hoge">&nbsp;</p>などを置換
    $content = preg_replace('/\\t+<p(\\s.+?=".+?">|>)(&nbsp;)*?<\\/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!

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://miniturbo.org/2007/04/03/125411/trackback/
Listed below are links to weblogs that reference
エントリー本文の追記情報を置換するHook from miniturbo.org

Home > archives > エントリー本文の追記情報を置換するHook

Search

Return to page top