我的网站设置为在第 7 段显示附加项。因为并非每个帖子都像另一个帖子一样长,这可能会导致一些奇怪的广告展示位置。
相反,我想使用以下逻辑:
If number_of_paragraphs => 14
然后paragraph_insert_id= number_of_paragraphs / 2
. Else nothing
.
//adding mid post add based on paragraph
add_filter( 'the_content', 'prefix_insert_post_ads_mid' );
function prefix_insert_post_ads_mid( $content ) {
$ad_code = '<div id="adsensemid">code goes here</div>';
if ( is_single() && ! is_admin() ) {
return prefix_insert_after_paragraph( $ad_code, $content );
}
return $content;
}
function prefix_insert_after_paragraph( $insertion, $content ) {
$closing_p = '</p>';
$paragraphs = explode( $closing_p, $content );
// floor or ceil; to make it round
$mid = ceil(length($paragraphs) / 2);
foreach ($paragraphs as $index => $paragraph) {
if ( trim( $paragraph ) ) {
$paragraphs[$index] .= $closing_p;
}
if ( $mid == $index + 1 ) {
$paragraphs[$index] .= $insertion;
}
}
return implode( '', $paragraphs );
}
不幸的是,我的第一次修改已经破坏了脚本。当应用于网站时,所有内容都是空白的。有人能找到破绽吗?任何帮助将不胜感激!
PS当前工作脚本:
//adding mid post add based on paragraph
add_filter( 'the_content', 'prefix_insert_post_ads_mid' );
function prefix_insert_post_ads_mid( $content ) {
$ad_code = '<div id="adsensemid></div>';
if ( is_single() && ! is_admin() ) {
return prefix_insert_after_paragraph( $ad_code, 7, $content );
}
return $content;
}
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 );
}
我已经确定了这个问题。该代码现在功能齐全。
$mid = ceil(count($paragraphs) / 2);
完整代码示例:
//adding mid post add based on paragraph
add_filter( 'the_content', 'prefix_insert_post_ads_mid' );
function prefix_insert_post_ads_mid( $content ) {
$ad_code = '<div id="adsensemid">code goes here</div>';
if ( is_single() && ! is_admin() ) {
return prefix_insert_after_paragraph( $ad_code, $content );
}
return $content;
}
function prefix_insert_after_paragraph( $insertion, $content ) {
$closing_p = '</p>';
$paragraphs = explode( $closing_p, $content );
// floor or ceil; to make it round
$mid = ceil(count($paragraphs) / 2);
foreach ($paragraphs as $index => $paragraph) {
if ( trim( $paragraph ) ) {
$paragraphs[$index] .= $closing_p;
}
if ( $mid == $index + 1 ) {
$paragraphs[$index] .= $insertion;
}
}
return implode( '', $paragraphs );
}
我确实在设计中遇到了一个缺陷。如果使用分页符(下一页标记(,则此脚本仍将计算整个内容。因此,假设您有一篇包含两页的帖子,每页包含 4 个段落。脚本将计数 8 并在第 4 段之后扔自己。因为文章是分开的,所以它不会是中心,而是两页中每一页的最后一段。
所以现在我已经将原始代码修改为以下条件段落 <= 8 不显示任何内容第 <14 段找到真正的中间(如上面的代码(否则使用第 7 段
function prefix_insert_after_paragraph( $insertion, $paragraph_id, $content ) {
$closing_p = '</p>';
$paragraphs = explode( $closing_p, $content );
$number_of_paragraphs = ceil(count($paragraphs));
if ($number_of_paragraphs <= 8 ) {
//too small to display middle add
$insertion = '';
} elseif ( $number_of_paragraphs <= 14 ){
//too short for 7th paragraph, find true center
$mid = ceil(count($paragraphs) / 2);
$paragraph_id = $mid ;
}
foreach ($paragraphs as $index => $paragraph) {
if ( trim( $paragraph ) ) {
$paragraphs[$index] .= $closing_p;
}
if ( $paragraph_id == $index + 1 ) {
$paragraphs[$index] .= $insertion;
}
}
return implode( '', $paragraphs );
}
如果有人有解决方案来找到在多个页面之间拆分的帖子的真正中心(我最多有 8 个分页符!(,那么请告诉我。