需求:
有个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。