需求:

有个adsense帐号很久没登录了,而且也没其他网站挂着这adsense的代码.
要是长期没展示的话,怕不知道哪天出个什么意外把帐号给我停掉了。
干脆就直接像原来一样,挂在zctou.com上就好了。

网站从wordpress 换成 typecho后,一直用插件实现的 广告管理也就没法用了,只能研究一下本主题的结构,顺便给网站差不多的位置插入adsense广告的代码。

经搜索,官网论坛上给出了这么一个文章自动插入代码的方法。代码大体作用就是判断查找文章的第一个p标签位置,自动插入$ad_code广告代码。

代码如下,复制到functions.php即可:

function themeInit($archive) {
    // 判断是否是文章,如果是就插入广告
    $ad_code = '<div>这是你的广告</div>';
    if ($archive->is('single')) {
        $archive->content = prefix_insert_after_paragraph( $ad_code, 2, $archive->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 );
}

如何实现自动插入

直接复制报错的可能性极大,原因是大部份主题都定义了 function themeInit()函数。
以本站主题为例,原来就定义了 function themeInit(),只需要在后面加入判断语句即可:
function themeInit($archive) {
    $options = Helper::options();
    $options->commentsAntiSpam = false;
    if ($options->PjaxOption || FindContents('page-whisper.php', 'commentsNum', 'd')) {
        $options->commentsOrder = 'DESC';
        $options->commentsPageDisplay = 'first';
    }
    if ($archive->is('single')) {
        $archive->content = hrefOpen($archive->content);
        if ($options->AttUrlReplace) {
            $archive->content = UrlReplace($archive->content);
        }
        if ($archive->fields->catalog) {
            $archive->content = createCatalog($archive->content);
        }
    }
    if ($options->duanma) {
        require_once __DIR__ . '/shortcode.php';
    }
    $comment = spam_protection_pre($comment, $post, $result);

        
    // 后加的判断是否是文章,如果是就插入广告
    $ad_code = '<div>adsense script</div>';
    if ($archive->is('post')) {
        $archive->content = prefix_insert_after_paragraph( $ad_code, 2, $archive->content );;
    }
}
注意, 原示例 为if ($archive->is('single')),这里是if ($archive->is('post'))
single 会在文章和页面都显示。
post只在文章页显示。
page只在页面显示,很好理解。

效果可见本站页面,sidebar部份和主页的效果,则是直接通过主题直接插入代码实现的,为了防止忘记,已经作好备份,备份时间 2021/3/20

如何在Typecho插入Google Adsense代码

文章目录