环路

环路

问题描述:

特定关键字后,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),显示含年份的行后面的三段。

感谢您的帮助。我希望我的磨合句子不是太呃,跑动。

试试这个(粘贴在您的模板文件夹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