0

私は SQL と $wpdb が初めてなので、ご容赦ください。

私は 2002 年にさかのぼる古い WordPress ブログに取り組んでいます。数年前に別の CMS から WordPress に移行されました。

過去 10 年間、投稿の見出し、日付、著者情報、および場合によってはその他のデータ (号数など) が各投稿の上部に手動で追加されていました。この情報は新しい投稿に動的に入力されるようになりましたが、古い投稿のコンテンツ内にはまだ存在しています。

私がやろうとしているのは、サイトにタグを追加することです。ほとんどの投稿はタグ付けされていますが、タグ付け機能が実際にプッシュされることはありませんでした.

タグは正常に機能しますが、各タグ アーカイブ ページで、実際のコンテンツの最初の数段落を表示したいと考えています。つまり、手動で入力されたメタデータの最初の X 段落を除外したいと考えています。

その手動の投稿情報は、常に予測可能なパターンに従っているとは限りませんが、投稿情報の最後の行に常に日付が含まれているようです.

したがって、投稿の実際のコンテンツ内では、次のようになります。

<h1>[Post Title]</h1>
<p>By [Author], [Title]<br />
[Month] [Day], [Year]</p>

[ACTUAL POST CONTENT]

または、次のようになります。

<p class="post_title">[Post Title]</p>
<br><br>
By [Author], [Title]<br>
[Month] [Day], [Year]; Issue #[issue]

[ACTUAL POST CONTENT]

したがって、投稿が始まる前の実際の行数は可変ですが、最後の行の日付の存在は一定です。

私が疑問に思っているのは、「年」(2002-2012) の post_content を検索し、年を含む行の後の 3 つの段落のみを表示するクエリを (ループ内で) 実行する方法があるかどうかです。

ご協力いただきありがとうございます。私の実行文があまりにも実行されていなかったことを願っています。

4

1 に答える 1

1

これを試してください (テンプレート フォルダーの functions.php ファイルに貼り付けます)。2002 年から 2012 年までの 4 桁の年の後の最初の 3 つの段落で述べたように、コンテンツがフィルター処理され、年 (2002, 2003) が検出されます。 ... 2012) 最初の 3 つの段落 (<p>タグで囲まれたテキスト) を返します

add_filter('the_content', 'filter_year');
function filter_year($content)
{
    $text=$content;
    preg_match('/(20)(\d{2})/', $text, $matches);
    if($matches && ($matches[0] >= 2002 && $matches[0] <= 2012))
    {
        $matches_splited=preg_split('/20[0-9]{2}/', $text);
        preg_match_all('/<p.*?\>(.*?)<\/p>/si', $matches_splited[1], $paras);
        if($paras)
        {
            $c=0;
            foreach($paras[0] as $p)
            {
                if($c <= 2) $new_content.=$p;
                $c++;
            }
            return $new_content;
        }   
    }
    return $content;
}

以下のコンテンツから

テストの始まり テスト テスト テスト テスト テスト テスト テスト テスト テスト テスト テスト テスト テスト テスト テスト テスト テスト テスト 2010 <p>First Paragraph</p><p>Second Paragraph</p><p>Third Paragraph</p><p>Fourth Paragraph</p><p>Fifth Paragraph</p>

あなたは得るでしょう

<p>First Paragraph</p>
<p>Second Paragraph</p>
<p>Third Paragraph</p>

そして、これは反響します

First Paragraph
Second Paragraph
Third Paragraph
于 2012-07-10T19:04:38.473 に答える