在设置段落数后添加其他广告

时间:2015-08-06 15:01:18

标签: php wordpress web

我目前已经设置了我的网站,它会在任何文章的第2段后自动添加Google Adsense广告,但如果有人能够提供帮助,我想对此进行改进。

我想在此代码中添加另外两个广告;一个在第6段之后,另一个在第10段之后。如果文章未达到这些段落编号,则广告不应显示。

这可能是非常明显的事情,但我尝试的任何事情都会导致我重新加载网站时,functions.php文件崩溃。

我的代码是......

add_filter( 'the_content', 'prefix_insert_post_ads' );

function prefix_insert_post_ads( $content ) {

$ad_code = '<div class="mobilead .visible-xs-block hidden-sm hidden-md hidden-lg"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle"
 style="display:block"
 data-ad-client="ca-pub-XXXX"
 data-ad-slot="1716361890"
 data-ad-format="auto"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></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 );
}

作为一个补充问题 - 有没有办法限制这些广告仅在帖子上展示,而不是在网页上展示?目前他们正在任何地方展示。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

我的广告代码有太多错误让我尝试猜测应该是什么(它有一个开头<div>但没有关闭</div>,它有什么似乎是<script>代码之外的javascript)

...所以我跳过那个部分,然后简单地展示如何插入另一个p aragraph - 这将在你想要的位置插入某些,并展示如何使用get_post_type()以确保广告仅显示在帖子上:

add_filter( 'the_content', 'prefix_insert_post_ads' );

function prefix_insert_post_ads( $content ) {
    //The last condition here ensures that ads are only added to posts
    if ( is_single() && !is_admin() && get_post_type() === 'post' ) {
        return prefix_insert_ads( $content );
    }

    return $content;
}

function prefix_insert_ads( $content ) {
    $closing_p = '</p>';
    $paragraphs = explode( $closing_p, $content );
    foreach ($paragraphs as $index => $paragraph) {
        $paragraphs[$index] .= $closing_p;
        if ( in_array($index, array(1, 5, 9)) ) {
            //Replace the html here with a valid version of your ad code
            $paragraphs[$index] .= '<p style="background:#f00">Ad goes here</p>';
        }
    }

    return implode( '', $paragraphs );
}

答案 1 :(得分:0)

检查来自https://codex.wordpress.org/Function_Reference

的条件标签索引部分中的功能
if(!is_page()) {
    // do your tricks
}

您还可能需要其他一些功能,例如is_home()is_front_page()等。