想要在广告插入插件中添加其他功能(确定文章中的段落数量)
我正在使用特定于网站的插件在我的博文的段落之间插入广告。该插件工作顺利。它的代码是这样的 -想要在广告插入插件中添加其他功能(确定文章中的段落数量)
<?php
//Insert ads after second paragraph of single post content.
add_filter('the_content', 'prefix_insert_post_ads');
function prefix_insert_post_ads($content) {
$ad_code = '<div>Ads code goes here</div>';
if (is_single() && ! is_admin()) {
return prefix_insert_after_paragraph($ad_code, 2, $content);
}
return $content;
}
// Parent Function that makes the magic happen
function prefix_insert_after_paragraph($insertion, $paragraph_id, $content)
{
$closing_p = '</p>';
$paragraphs = explode($closing_p, $content);
foreach ($paragraphs as $index => $paragraph) {
if (trim($paragraph)) {
$paragraphs[$index] .= $closing_p;
}
if ($paragraph_id == $index + 1) {
$paragraphs[$index] .= $insertion;
}
}
return implode('', $paragraphs);
}`
它运行良好,并显示广告代码,无论它被要求。
我想添加另一个函数。我希望插件能够确定帖子中可用的段落数量,并且只有帖子的段落数量最少(例如10)才能显示广告。
简而言之,只有文章中至少有10个段落,插件才能展示广告。如果帖子短于该帖子,该插件不应显示该广告。
任何人都可以帮我解决这个问题吗?
任何帮助将不胜感激。
DOMDocument
负责这种事情:
$dom = new \DOMDocument;
$dom->loadHTML($content);
$paragraphs = $dom->getElementsByTagName('p');
echo $paragraphs->length; // Outputs number of <p> elements
在你的函数:
function prefix_insert_post_ads($content)
{
$ad_code = '<div>Ads code goes here</div>';
$dom = new \DOMDocument;
$dom->loadHTML($content);
$paragraphs = $dom->getElementsByTagName('p');
if (is_single() && !is_admin() && $paragraphs->length > 10 /*more than ten paragraphs*/) {
return prefix_insert_after_paragraph($ad_code, 2, $content);
}
return $content;
}
嗨@revo,代码工作正常!谢谢您的帮助。顺便说一句,DOMDocument之前的'\',我删除它。是否有必要在代码中使用它? –
@ArunKallarackal包含反斜杠是一种很好的做法。然而,当你使用OOP方法时,它的需求会更加明显(它会带你进入全局命名空间)。如果我的回答有帮助,请将其标记为已接受。 – revo
你可以指望通过正则表达式结束'p'标签的数量,如果这是你如何定义“段落“ – Gant