WordPressの記事を書く時のmoreが面倒臭い! カテゴリ一覧表示で「続きを読む」を自動的に。

まず、

カテゴリの一覧表示の時、何ページ分もの記事が全体表示されるのはよくない。
そこでmoreを入れて記事を区切るんですが、よく忘れます。
つーか、いちいち書きたくありません。

探せばプラグインありそうだけど調べるのしんどいのでちゃちゃっとコード書きました。

その前に

WordPressがある程度使える人用です。
コードを使用する際は自己責任でお願いします。

筆者の環境

えーと、私はWordPressで記事を書く時はマークダウンを使って書きます。
それ用のプラグインWP Githuber MDを使用してます。

カテゴリ一覧に表示される記事を縮小表示

functions.phpに、

add_filter('the_content', function($content){

    // カテゴリ限定(ほかの条件も必要に応じて追加する)
    if(is_category())
    {
        $limit = 100;

        // ソースコードを削除
        $content = preg_replace('#<code\s(.*?)>.*?</code>#s', '', $content);

        // 空白4つのコードを削除
        $content = preg_replace('#<pre>s*?<code>(.*?)</code>\s*</pre>#s', '', $content);

        $content = wp_strip_all_tags($content);
        $content = mb_substr($content, 0, $limit);
        $url = get_permalink();
        $count = mb_strlen($content);
        if($count > $limit)
        {
            $content .= '...';
        }
        $content .= "\n";
        $content .= "<p><a href=\"$url\" class=\"see-next\">続きを読む・・・</a></p>";
    }

    return $content;
}, 1);

この例はカテゴリ限定です。
必要に応じてifで条件付け足します。

ただちょっと特殊な個所があって

// ソースコードを削除
$content = preg_replace('#<code\s(.*?)>.*?</code>#s', '', $content);

// 空白4つのコードを削除
$content = preg_replace('#<pre>s*?<code>(.*?)</code>\s*</pre>#s', '', $content);

ここは人によってはいらない箇所ですね。

私はマークダウンでよくコードを書くので、コード部分を丸ごと削除したいと考えました。
何故codeタグに条件を付けているのかというと、文字列の強調表示した時もcodeタグで囲まれていました。
例えば、私は強調文字です ←何でcodeでくくるねん。

将来仕様が変わる可能性があるので注意が必要です。

あ、

後から知ったんですが「Auto Limit Posts Reloaded」というプラグインがあるようです。

BlockEditor certificate css DataGrid Docker Gutenberg Hyper-V iframe MUI openssl PHP React ReduxToolkit REST ubuntu WordPress オレオレ認証局 フレームワーク