月度归档:2014年11月

wordpress集成百度Sitemap实时推送代码

之前百度官方出了一款wordpress的结构化数据实时推送插件,该款wordpress插件的作用是向百度提交结构化数据的xml,帮助站点保证百度蜘蛛对站点的抓取频率,但是推送页面不保证收录(http://zhanzhang.baidu.com/schema/index),但是百度官方并没有推出Sitemap的实时推送插件,其实Sitemap的实时推送才能最大几率的保证站点的页面被抓取并且被收录,不过大多数站点并没有开通Sitemap权限,以下是引用百度官方对实时推送的介绍:http://zhanzhang.baidu.com/wiki/215

好了进入正题,其实小V这次写这篇教程是为一位认识了好几年的基友写的~~他的wordpress站点也百度站长平台的Sitemap权限,但是又不知道如何来操作百度Sitemap的实时推送~好了闲话就不多说了~直接上代码:

function PushBaiDu($post_id,$post){
//百度推送接口地址
    $Push = '百度推送接口地址';
    $PushUrl = get_permalink($post_id);
    $PushDate = $post->post_data;
//构造推送xml数据
    $PushXml = '<?xml version="1.0" encoding="UTF-8"?>
    <urlset>
        <url>
            <loc><![CDATA['.$PushUrl.']]></loc>
            <lastmod>'.$PushDate.'</lastmod>
            <changefreq>daily</changefreq>
            <priority>0.9</priority>
        </url>
    </urlset>';
//创建http请求对象
    $wp_http_obj = new WP_Http();
//发送http post请求提交xml数据
    return $wp_http_obj->post($Push, array('body' => $PushXml, 'headers' => array('Content-Type' => 'text/xml')));
}
add_action('publish_post', 'PushBaiDu');

将以上代码加入到当前使用的wordpress主题的functions.php文件中即可,记得替换$Push变量的值为你们的百度Sitemap实时推送接口调用地址,如果您的站点没有开通百度Sitemap权限则此代码不可用。

Sitemap实时推送接口获取地址:http://zhanzhang.baidu.com/sitemap/pingadd

加上以上代码后发布文章wordpress将会自动推送文章到百度的服务器~本站的博客聚集地实时推送以及评论福利的核心代码都和本教程的代码相似,下面来张维7维3四月份之前的推送列表截图:

wordpress集成百度Sitemap实时推送代码-wordpress教程-代码笔记

2014.12.28补充

如果使用以上代码出现报错:Warning: Missing argument 2 for PushBaiDu(),请将代码改成以下版本:

function PushBaiDu(){
    global $post_id;
    global $post;
//百度推送接口地址
    $Push = '百度推送接口地址';
    $PushUrl = get_permalink($post_id);
    $PushDate = $post->post_data;
//构造推送xml数据
    $PushXml = '<?xml version="1.0" encoding="UTF-8"?>
    <urlset>
        <url>
            <loc><![CDATA['.$PushUrl.']]></loc>
            <lastmod>'.$PushDate.'</lastmod>
            <changefreq>daily</changefreq>
            <priority>0.9</priority>
        </url>
    </urlset>';
//创建http请求对象
    $wp_http_obj = new WP_Http();
//发送http post请求提交xml数据
    return $wp_http_obj->post($Push, array('body' => $PushXml, 'headers' => array('Content-Type' => 'text/xml')));
}
add_action('publish_post', 'PushBaiDu');

对wordpress非插件生成html静态缓存教程的补充,自动更新缓存

之前小V曾经写过一篇《wordpress非插件生成html缓存》的wordpress教程,在教程发布后有不少小伙伴使用了该教程的代码来对自己的wordpress站点进行缓存加速,在此教程发布不久之后便有不少小伙伴联系小V说是该方法缓存后网站速度有了非常明显的提升,但是该方法有个弊端,就是缓存不会自动更新,这次小V就来对该加速方法进一步的补充下,添加自动更新缓存功能,实现发布新文章或者是更新文章之后立即自动刷新缓存。

实现方法如下:

一、复制一下这段代码保存为del.php文件。

<?php
define('DEL_DIR',dirname(__FILE__).'/cache');
function deleteAll($path) {
    $op = dir($path);
    while(false != ($item = $op->read())) {
        if($item == '.' || $item == '..') {
            continue;
        }
        if(is_dir($op->path.'/'.$item)) {
            deleteAll($op->path.'/'.$item);
            rmdir($op->path.'/'.$item);
        } else {
            unlink($op->path.'/'.$item);
        }
           
    }   
}
if( $_GET['up'] == 1 )
deleteAll(DEL_DIR);

二、将保存好的文件放入wordpress的同级目录下,然后将以下代码加入到当前使用的wordpress主题的functions.php文件中。

function PushCache(){
    $PushUrl = home_url('/').'del.php?up=1';
    $request = new WP_Http();
    return $request->request($PushUrl);
}
add_action('publish_post', 'PushCache');
add_action('delete_post', 'PushCache');
add_action('post_updated', 'PushCache');
add_action('publish_page', 'PushCache');

添加完两篇教程中的所有代码后即可让wordpress实现非插件自动生成html缓存,并且自动更新缓存了~~

(PS:由于小V维护服务器时手误,造成网站数据丢失。。并且宕机半小时。之后凭着记忆手打补回来了几篇文章。。但是评论数据就没了。。坑爹啊)

高级wordpress访客统计插件:WP Statistics

WP Statistics 是一个非常强大的统计分析插件,通过这个插件,你可以比较详细地了解到访问网站的用户信息,比如每天访问量、来源、浏览了哪些文章、使用的系统、浏览器等等,具体功能如下:

用户在线,看看目前有多少人浏览你的网站

访问量,看看每一天有多少点击您的网站

游客,看看谁在访问您的网站

网页跟踪,了解哪些页面被浏览最多

搜索引擎,来自谷歌,必应,DuckDuckGo,雅虎,Yandex和百度等流行搜索引擎的查询和重定向

按国家GeoIP的位置

支持用于未存储的IP地址在数据库中

访客位置的地图

统计电子邮件报告

基于WordPress角色,为视图设置访问级别

在统计数据中排除某些用户角色

在统计数据中排除某些机器人

在统计数据中排除某些IP

在统计数据中排除登录/管理页面

自动更新到GeoIP的数据库

自动删除旧数据的数据库

将数据导出到Excel,XML,CSV或TSV文件

概述和详细页的各种数据,包括;浏览器版本,国家统计数据,命中,排除,引荐,搜索,搜索词和游客

窗口小部件提供信息给用户

自带不同类型的数据的简码,可以在小工具和文章/页中调用

自带仪表盘小工具

综合管理手册

插件截图

高级wordpress访客统计插件:WP Statistics-wordpress插件-代码笔记

wordpress网站用户注册不支持中文用户名的解决方法

之前有不少小伙伴询问小V关于wordpress网站注册不支持中文用户名的问题,之前小V一直没有时间来做个相关的wordpress教程其实这类问题百度谷歌一下也是有很多解决方案的趁着今天小V有点空闲立马写个教程记录下,也便于其他新人查看~~其实让wordpress支持中文用户名也很简单,在当前使用的wordpress主题的functions.php文件中加入一下代码:

function ludou_sanitize_user ($username, $raw_username, $strict) {
  $username = wp_strip_all_tags( $raw_username );
  $username = remove_accents( $username );
  // Kill octets
  $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username );
  $username = preg_replace( '/&.+?;/', '', $username ); // Kill entities
  
  // 网上很多教程都是直接将$strict赋值false,
  // 这样会绕过字符串检查,留下隐患
  if ($strict) {
    $username = preg_replace ('|[^a-z\p{Han}0-9 _.\-@]|iu', '', $username);
  }
  
  $username = trim( $username );
  // Consolidate contiguous whitespace
  $username = preg_replace( '|\s+|', ' ', $username );
  
  return $username;
}
  
add_filter ('sanitize_user', 'ludou_sanitize_user', 10, 3);

以上代码来自露兜博客~借鉴了wp-includes/formatting.php中sanitize_user函数的写法,对数据做了进一步的安全验证~~

wordpress防止站内搜索被他人恶意利用

相信很多站长遇到过这种情况:网站内的搜索功能被不良分子利用,通过在站内搜索框中不断搜索敏感关键词,产生一大批TITLE上带有敏感关键词的垃圾搜索结果页(如下图)。由于Baiduspider对每个站点的抓取额是有限定的,所以这些垃圾搜索结果页被百度收录,会导致其它有意义的页面因配额问题不被收录,同时可能因百度处理垃圾页面而影响网站正常排名。

wordpress防止站内搜索被他人恶意利用-wordpress教程-代码笔记 %

以上内容引自百度站长平台:http://zhanzhang.baidu.com/wiki/336

那么wordpress如何来预防这种恶意的利用呢?其实很简单在当前使用的wordpress主题的functions.php加入以下代码:

add_action('admin_init', 'v7v3_search_ban_key');
function v7v3_search_ban_key() {
    add_settings_field('v7v3_search_key', 'v7v3搜索关键词屏蔽', 'v7v3_search_key_callback_function', 'reading');
    register_setting('reading','v7v3_search_key');
}
      
function v7v3_search_key_callback_function() {
    echo '<textarea name="v7v3_search_key" rows="10" cols="50" id="v7v3_search_key" class="large-text code">' . get_option('v7v3_search_key') . '</textarea>';
}
add_action('template_redirect', 'v7v3_search_ban');
function v7v3_search_ban(){
    if (is_search()) {
        global $wp_query;
        $v7v3_search_key =  get_option('v7v3_search_key');
        if($v7v3_search_key){
            $v7v3_search_key = str_replace("\r\n", "|", $v7v3_search_key);
            $BanKey = explode('|', $v7v3_search_key);
            $S_Key = $wp_query->query_vars;
            foreach($BanKey as $Key){
                if( stristr($S_Key['s'],$Key) != false ){
                    wp_die('请不要搜索非法关键字');
                }
            }
        }
    }
}

加入该代码后在wordpress的后台设置选项下的阅读设置里面就会出现一个文本域,如下图:

wordpress防止站内搜索被他人恶意利用-wordpress教程-代码笔记 %

将需要屏蔽的关键词输入到文本域里即可,一行一个关键词。英文不区分大小写,下面是搜索效果测试:

wordpress防止站内搜索被他人恶意利用-wordpress教程-代码笔记 %

wordpress键盘事件监听,按键翻页功能

最近很多小伙伴肯定都发现了维7维3又添加了一个新功能,没错就是屌炸天的按键翻页功能这几天小V一直都在测试这个功能,刚加上按键翻页功能后就有不少小伙伴来问小V怎么实现这个功能,今天小V就来教大家如何为wordpress网站添加按键翻页功能,该功能的原理其实就是利用js的键盘事件监听实现的,好了不罗嗦直接上代码:

<?php
add_action('wp_footer','v7v3_keyCode');
function v7v3_keyCode(){
    global $paged, $wp_query;
    if ( !$max_page )
        $max_page = $wp_query->max_num_pages;
    if ( !$paged )
        $paged = 1;
    $nextpage = intval($paged) + 1;
?>
<?php if( is_single() ) : ?>
<script type="text/javascript">
    document.onkeydown = v7v3_page;function v7v3_page(e) {
    var e = e || event,
    keycode = e.which || e.keyCode;
    var obj = e.target || e.srcElement;
    if(obj.tagName.toLowerCase()=="textarea"){return;}
    if(obj.tagName.toLowerCase()=="input"){return;}
    if (keycode == 37) location = '<?php echo get_permalink(get_adjacent_post(false,'',false)); ?>';
    if (keycode == 39) location = '<?php echo get_permalink(get_adjacent_post(false,'',true)); ?>';
    }
</script>
<?php elseif( is_home() || is_category() ) : ?>
<script type="text/javascript">
    document.onkeydown = v7v3_page;function v7v3_page(e) {
        var e = e || event,
        keycode = e.which || e.keyCode;
        var obj = e.target || e.srcElement;
        if(obj.tagName.toLowerCase()=="textarea"){return;}
        if(obj.tagName.toLowerCase()=="input"){return;}
        if (keycode == 37) location = '<?php echo get_previous_posts_page_link(); ?>';
        if (keycode == 39) 
        <?php if ( $nextpage <= $max_page ) : ?>
            location = '<?php echo get_next_posts_page_link(); ?>';
        <?php else : ?>
            location = '<?php echo get_pagenum_link( $max_page ); ?>';    
        <?php endif; ?>
    }
</script>
<?php endif; ?>
<?php
}
?>

将以上代码加入到当前使用的wordpress主题的functions.php文件中(PS:代码加到第一个<?php之前或最后一个?>之后),即可。(PS:添加以上代码后即可使用左右方向键进行翻页~~)

 

自从听了《一百块钱都不给我》小V整个人都不好了。。。完全停不下来的节奏

博客园,开源中国博客数据导入wordpress插件

很多小伙伴在cnblogs、osc搭建了个人博客,但是随着长时间的使用,有些小伙伴会发现cnblogs、osc搭建的个人博客功能很少,自定义也很差。想将博客迁移到wordpress平台又发现数据导出导入太过于麻烦。现在大家不用担心了,小V为大家介绍一款插件,这款插件可以帮助大家自动转换博客园、开源中国的文章导入到wordpress中来哦。

这款插件已在wordpress插件中心上线,大家可以直接在wordpress控制台进行在线安装,安装方法:

在wordpress控制台,点击“安装插件”搜索“cnblogs”或搜索“osc”即可找到插件

点击安装,稍作等待即可

进入“已安装的插件”页面启动插件

插件截图:

博客园,开源中国博客数据导入wordpress插件-wordpress插件-代码笔记

除了在线安装,也可以直接在本站下载插件后上传到插件目录在启用~

官方博客:http://levi.cg.am/archives/3759

WordPress 4.0.1 修复 8 项安全隐患和 23 个 bug

WordPress 4.0.1现已推出。这是一个针对先前版本的关键的安全更新,强烈建议立即更新你的网站。

支持自动后台更新的网站将在接下来的几个小时之内自动更新到 WordPress 4.0.1。如果你仍在使用WordPress 3.9.2,3.8.4 或 3.7.4,你将被更新到3.9.3,3.8.5,3.7.5。 (我们不支持老版本,所以请更新到最新最好的 4.0.1)

WordPress的版本3.9.2及更早版本都受到一个关键的跨站点脚本漏洞,该漏洞可能允许匿名用户破坏网站。这个问题不影响4.0版本,但4.0.1版本解决了以下这八个安全问题:

  • 3个跨站脚本问题,可以被投稿者(contributor)或作者(author)用来破坏网站

  • 1个跨站请求伪造,可以被用来欺骗用户更改密码

  • 1个问题,可能会在检查密码时导致拒绝服务

  • 当 WordPress 发送HTTP请求时,额外的服务器端请求伪造攻击

  • 一个极不可能的哈希冲突可能使用户的帐户受到影响,这也要求他们自2008年以来没有登录过(我希望我是在开玩笑)

  • WordPress 现在的密码重置邮件中的链接,如果用户记得他们的密码,登录,可以修改他们的邮件地址。

4.0.1 还修复了 4.0 的23个bug,同时我们还进行了两项硬化修改,其中包括更好的验证了摘录自上传照片的EXIF数据。

利用js控制全站出站链接,强制出站链接转跳统计访客出站数据

网站跳出率一直是广大站长比较关注的问题,访客点击页面直接跳出一般这个行为我们是无法控制的,只能靠优化用户体验,提高内容粘性来降低。但是如果访客点击页面上的出站链接那么,这个因素我们是可控制的并且可以强制用户转跳为站内链接,增加网站PV,并且了解用户点击出站的行为从而更好的来优化网站的用户体验,那么wordpress网站怎么来强制用户点击站外链接转换为站内链接呢?代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>外链跳出统计</title>
<style>
html,body{
    font-size:12px;
    overflow:hidden
}
body{
    padding:0 0 0 0;
    font-size:12px;
    margin:0;
    height:100%;
}
#barframe{
    width:100%;
    height:100%;
    z-index:3;
    position:absolute
}
</style>
</head>
<body>
<?php
if( isset($_GET['go']) || isset($_GET['referer']) ) {
echo "<iframe noresize=\"noresize\" frameborder=\"0\" src=".strip_tags($_GET['go'])." id=\"barframe\"></iframe>";
}else echo '错误的参数';
?>
<div style="display:none">
统计代码
</div>
</body>
</html>

将以上代码复制后保存为referer.php文件,然后放入自己的网站统计代码上传至wordpress网站的根目录,然后打开当前使用的wordpress主题的functions.php文件加入以下代码:

function v7v3_referer(){
echo "<script>
window.onload=function(){
  var a = document.getElementsByTagName('a');
  for(var i=0;i<a.length;i++) a[i].onclick = function(){
    if(this.href.indexOf('javascript:;')==-1 && this.href.indexOf('".$_SERVER['HTTP_HOST']."')==-1)
    this.href='".get_bloginfo('url')."'/referer.php?go=' + encodeURIComponent(this.href) + '&referer=' + window.location.href;
    }
}
</script>";
}
add_action( 'wp_head', 'v7v3_referer' );

(PS:该代码必须加载到wp_head钩子中如果主题没有加入该钩子,则代码不会生效)

效果演示:http://www.baidu.com

html源代码中的链接依然是百度的但是点击后就强制转跳到内链了,链接参数说明,go参数表示用户点击的页面,referer参数表示从哪个页面点击的出站链接,这样一来在网站数据统计中就可以明确的得知访客是从哪个链接点击的站外链接。

解决近期Gravatar头像被屏蔽导致网站速度变慢问题

最近群里又有很多小伙伴私下咨询小V,为什么最近wordpress又开始变的很慢了,不管是前台还是后台,而且谷歌字体已经替换成360的镜像服务上了。但还是奇慢无比,今天小V抽空查看了下,原来是著名的Gravatar头像又被伟大的墙给屏蔽了:

解决近期Gravatar头像被屏蔽导致网站速度变慢问题-wordpress教程-代码笔记

谷歌字体的事没完,Gravatar头像又被挡在墙外了。。。小V真的已经不知道该说什么好了,那么如何来解决Gravatar头像被屏蔽的问题呢,其实也不难,老规矩在主题的functions.php加上一段代码即可搞定,代码如下:

function v7v3_get_avatar($avatar) {
    $avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),
"gravatar.duoshuo.com",$avatar);
    return $avatar;
}
add_filter( 'get_avatar', 'v7v3_get_avatar', 10, 3 );

以上代码的作用是将Gravatar头像资源全部替换成国内多说的Gravatar头像镜像服务器上,不过不知道是不是多说的缓存问题,部分头像并没有镜像成功,会出现502超时现象,如果大家发现多说的Gravatar头像镜像服务有问题可以将代码里面的gravatar.duoshuo.com换成cd.v7v3.com,该域名是小V自己搭建的Gravatar镜像,镜像源是直接从官方获取的所以无问题~~(PS:本站镜像采用智能解析,同时使用七牛以及百度云加速服务进行cdn加速,全国各地都有节点不用担心宕机或者速度很慢的问题。)