根据段落数在中心添加添加代码


Adding addcode at the center based on number of paragraphs

我的网站设置为在第 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 个分页符!(,那么请告诉我。