如何解析和抓取 WordPress 的内容
How to parse and scrape the content of WordPress
是否可以使用自定义函数来截断博客 post 页面上 defined DIV
的内容,以用作博客索引页面上的摘要。因此,而不是使用 $the_content
或 $the_excerpt
- 是否可以创建 $the_customContent 并有一些 PHP 检查博客 post 页面并收集内容div 和 class“ThisIsTheContentToUse” - 原因是我的博客 posts 在我希望作为博客摘要包含在博客索引中的内容上方的页面上有内容页面 - 所以要么告诉 WP 忽略那些内容块,或者,可能更容易 - 只告诉 WP 要截断的内容在哪里 - 例如在“ThisIsTheContentToUse”div...可能吗?
如果是这样...怎么办?似乎无法在网上找到任何定义此自定义功能的内容 - 我肯定不是第一个想要这样做的人...?
apply_filters 能让这成为可能吗?
https://developer.wordpress.org/reference/hooks/the_content/
因此,博客 post 的结构如下:
<div class="headerArea">
<h2>The title is here</h2>
<ul>
</div>
<div class="bullets">
<li>Bullet 1</li>
<li>Bullet 2</li>
<li>Bullet 3</li>
</ul>
</div>
<div class="ThisIsTheContentToUse">
<p>The content starts here</p>
</div>
所以,目前用基本的get_the_content
,结果是:
"The title is here Bullet 1 Bullet 2 Bullet 3 The content starts here"
但我想要的只是the content of the "ThisIsTheContentToUse" div
。
所以会是:
"The content starts here"
我们可以通过多种方式进行设置,其中两种很受欢迎。我们可以使用 php DOMDocument
class 以及我最喜欢的 regular expressions
!
使用DOMDocument
:
- 首先,我们使用
get_the_content
函数获取内容。
- 然后,我们将使用
DOMDocument
阅读内容。
- 最后解析它。
$test = get_the_content();
if (class_exists('DOMDocument'))
{
$dom = new DOMDocument();
$class_name = 'ThisIsTheContentToUse';// This is the class name of your div element
@$dom->loadHTML($test);
$nodes = $dom->getElementsByTagName('div');
foreach ($nodes as $element)
{
$element_class = $element->getAttribute('class');
if (substr_count($element_class, $class_name))
{
echo 'Using DOMDocument: ' . $element->nodeValue;
}
}
}
这将输出:
使用Regular Expressions
:
- 我们使用
preg_match
函数。
- 这是模式
<div class="ThisIsTheContentToUse">([^w]*?)<\/div>
。
$test = get_the_content();
preg_match('/<div class="ThisIsTheContentToUse">([^w]*?)<\/div>/', $test, $match);
$new_excerpt = $match[1];
echo 'Using regular expressions: ' . $new_excerpt;
这将输出:
是否可以使用自定义函数来截断博客 post 页面上 defined DIV
的内容,以用作博客索引页面上的摘要。因此,而不是使用 $the_content
或 $the_excerpt
- 是否可以创建 $the_customContent 并有一些 PHP 检查博客 post 页面并收集内容div 和 class“ThisIsTheContentToUse” - 原因是我的博客 posts 在我希望作为博客摘要包含在博客索引中的内容上方的页面上有内容页面 - 所以要么告诉 WP 忽略那些内容块,或者,可能更容易 - 只告诉 WP 要截断的内容在哪里 - 例如在“ThisIsTheContentToUse”div...可能吗?
如果是这样...怎么办?似乎无法在网上找到任何定义此自定义功能的内容 - 我肯定不是第一个想要这样做的人...?
apply_filters 能让这成为可能吗?
https://developer.wordpress.org/reference/hooks/the_content/
因此,博客 post 的结构如下:
<div class="headerArea">
<h2>The title is here</h2>
<ul>
</div>
<div class="bullets">
<li>Bullet 1</li>
<li>Bullet 2</li>
<li>Bullet 3</li>
</ul>
</div>
<div class="ThisIsTheContentToUse">
<p>The content starts here</p>
</div>
所以,目前用基本的get_the_content
,结果是:
"The title is here Bullet 1 Bullet 2 Bullet 3 The content starts here"
但我想要的只是the content of the "ThisIsTheContentToUse" div
。
所以会是:
"The content starts here"
我们可以通过多种方式进行设置,其中两种很受欢迎。我们可以使用 php DOMDocument
class 以及我最喜欢的 regular expressions
!
使用DOMDocument
:
- 首先,我们使用
get_the_content
函数获取内容。 - 然后,我们将使用
DOMDocument
阅读内容。 - 最后解析它。
$test = get_the_content();
if (class_exists('DOMDocument'))
{
$dom = new DOMDocument();
$class_name = 'ThisIsTheContentToUse';// This is the class name of your div element
@$dom->loadHTML($test);
$nodes = $dom->getElementsByTagName('div');
foreach ($nodes as $element)
{
$element_class = $element->getAttribute('class');
if (substr_count($element_class, $class_name))
{
echo 'Using DOMDocument: ' . $element->nodeValue;
}
}
}
这将输出:
使用Regular Expressions
:
- 我们使用
preg_match
函数。 - 这是模式
<div class="ThisIsTheContentToUse">([^w]*?)<\/div>
。
$test = get_the_content();
preg_match('/<div class="ThisIsTheContentToUse">([^w]*?)<\/div>/', $test, $match);
$new_excerpt = $match[1];
echo 'Using regular expressions: ' . $new_excerpt;
这将输出: