[wp]functions.phpでthe_contentの中身をいじるメモ

挿入したりとか。

基本形

こうなる。

function content_custom($content){

    /* 色々やる */

    return $content;
}
add_filter('the_content', 'content_custom');

例えば目次を付けるプラグインとか、the_contentに挿入するものがある。
それとの兼ね合いで、挿入のタイミングを調整したい場合はadd_filter()内の引数をいじる。

第三引数に数値を入れることで優先度を指定する。

add_filter('the_content', 'content_custom'); //省略した場合は10
add_filter('the_content', 'content_custom', 0); //最小値
add_filter('the_content', 'content_custom', 999); //後にしたければ数を増やす

同じ優先度が並んだ場合、読み込まれた順番で処理される。

最初・最後に追加する例

function content_custom($content){

    //追加する内容
    $text = 'aaaa';

    //最初に追加
    $content = $text.$content;

    //最後に追加
    $content .= $text;    

    return $content;
}
add_filter('the_content', 'content_custom');

先頭に追加する場合は、連結したもので上書き。
末尾に追加する場合は変数に追加する。

記事の最初の見出しの直前に追加する例

見出しプラグインはこの手法。

function content_custom($content){

    $text = 'aaaa';

    if(preg_match('/<h[2-6]\b[^>]*>/i', $content)) {
        //最初の見出しの手前
        $content = preg_replace(
            '/(<h[2-6]\b[^>]*>)/i',
            $text . '$1',
            $content,
            1
        );
    }else{
        //記事内に見出しがない場合
        $content = $text.$content;
    }

    return $content;
}
add_filter('the_content', 'content_custom');

普通に考えたら使う見出しはh2からなんだけど、そうじゃない場合もあるから見出しタグだったら何でもっていう条件にしてある。

特定の投稿タイプに限定する例

投稿タイプを指定しなければWP内のすべての固定・投稿・カスタムが対象になる。
こういう内容は指定することがセットになるので必要な設定になるかと思う。

『カスタム投稿「sample」だったらいじる』の例。
2つとも同じ動作。

function content_custom($content){

    if(!is_singular('sample')){
        return $content;
    }

    $text = 'aaaa';
    $content = $text.$content;

    return $content;
}
add_filter('the_content', 'content_custom');
function content_custom($content){

    if(is_singular('sample')){
        $text = 'aaaa';
        $content = $text.$content;
    }

    return $content;
}
add_filter('the_content', 'content_custom');

return $content;の手前が編集内容になる。
だから、条件分岐を使ってどう割り振るか、結構自由度が高い。

導入例

出番はあんまりないんだけど、広告と同じ感じで自前のPRを一律で挿入したいときに使える。

テンプレート内で記述するのが手っ取り早いのだけど、先述の通り見出しの手前とか、本文中に挿入したいときはfunctions.phpに頼ってもいい。
+αのコンテンツはページ上じゃなくてサイト内の設定として管理したほうがスマートなような、どうなんでしょう。

包括的なカスタムフィールド(SCFのオプションページ機能)と組み合わせたら、管理画面上で表示する内容を指定したり表示・非表示の切り替えも導入できる。その上で、該当投稿タイプ内での切り替えもできなくない。

みたいな感じ。

コメント

タイトルとURLをコピーしました