想要在广告插入插件中添加其他功能(确定文章中的段落数量)

问题描述:

我正在使用特定于网站的插件在我的博文的段落之间插入广告。该插件工作顺利。它的代码是这样的 -想要在广告插入插件中添加其他功能(确定文章中的段落数量)

<?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个段落,插件才能展示广告。如果帖子短于该帖子,该插件不应显示该广告。

任何人都可以帮我解决这个问题吗?

任何帮助将不胜感激。

+0

你可以指望通过正则表达式结束'p'标签的数量,如果这是你如何定义“段落“ – Gant

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; 
} 
+0

嗨@revo,代码工作正常!谢谢您的帮助。顺便说一句,DOMDocument之前的'\',我删除它。是否有必要在代码中使用它? –

+0

@ArunKallarackal包含反斜杠是一种很好的做法。然而,当你使用OOP方法时,它的需求会更加明显(它会带你进入全局命名空间)。如果我的回答有帮助,请将其标记为已接受。 – revo