【问题标题】:Adding addcode at the center based on number of paragraphs根据段落数在中心添加addcode
【发布时间】:2016-05-11 10:01:20
【问题描述】:

我的网站设置为在第 7 段显示添加内容。因为不是每个帖子都和另一个帖子一样长,这可能会导致一些奇怪的广告展示位置。

相反,我想使用以下逻辑:

If number_of_paragraphs => 14 然后paragraph_insert_id= number_of_paragraphs / 2Else 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 );
}

【问题讨论】:

    标签: php wordpress web


    【解决方案1】:

    我已经确定了问题所在。该代码现在功能齐全。

    $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 段之后自行抛出。因为文章是分开的,所以它不会是中心,而是两页的最后一段。

    所以现在我已经将原始代码修改为以下条件 段落

    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 个分页符!),请告诉我。

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 2015-04-12
      • 2016-01-19
      • 1970-01-01
      相关资源
      最近更新 更多