環路

2012-07-10 33 views
0

特定關鍵字後,WordPress的內容顯示部分我是新來的SQL和$所以WPDB請多多包涵。環路

我工作在一箇舊的WordPress博客與帖子可以追溯到到2002年它從另一個CMS幾年前移民到WordPress。

縱觀過去十年,崗位標題,日期,作者信息,有時其他數據(如發行數量)手動添加到每個崗位的頂部。此信息現在在新帖子上動態填充,但仍舊存在於較舊帖子的內容中。

我想要做的就是添加標籤的網站。大多數帖子都被標記,但標記功能從未被推送過。

該標籤工作正常,但在每個標籤存檔頁面上,我想顯示實際內容的前幾個段落。換句話說,我希望它排除手動輸入元數據的前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] 

所以線路的實際數量後開始之前變量,但最後一行的日期是不變的。

什麼我不知道是如果有任何的方式來運行一個查詢(內循環),搜索POST_CONTENT爲「年」(2002-2012),顯示含年份的行後面的三段。

感謝您的幫助。我希望我的磨合句子不是太呃,跑動。

回答

1

試試這個(粘貼在您的模板文件夾functions.php文件),就像你說的2002年和2012年之間的4位後,今年三段,所以它會過濾的內容,會發現一年(2002年,2003 ... 2012),並返回前三段(文字包裹在<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