标签 WordPress 下的文章

转自:WordPress技巧:生成网站访问日志
今天tiandi分享一则wordpress技巧,让wordpress自己生成网站访问日志,日志内容可以自己定义,大致可以和主机供应商后台查询的日志差不多,这样就可以省去每次都要登录主机后台查询。

开打主题下的function,插入以下代码:

make_log_file();
function make_log_file(){
        //log文件名
    $filename = 'mylogs.txt'; 
        //去除rc-ajax评论以及cron机制访问记录
    if(strstr($_SERVER["REQUEST_URI"],"rc-ajax")== false 
        && strstr($_SERVER["REQUEST_URI"],"wp-cron.php")== false ) {
        $word .= date('mdHis',$_SERVER['REQUEST_TIME'] + 3600*8) . " ";
                //访问页面
        $word .= $_SERVER["REQUEST_URI"] ." ";
                //协议
        $word .= $_SERVER['SERVER_PROTOCOL'] ." ";
                //方法,POST OR GET
        $word .= $_SERVER['REQUEST_METHOD'] . " ";
        //$word .= $_SERVER['HTTP_ACCEPT'] . " ";
                //获得浏览器信息
        $word .= getbrowser(). " ";
                //传递参数
        $word .= "[". $_SERVER['QUERY_STRING'] . "] ";
                //跳转地址
        $word .= $_SERVER['HTTP_REFERER'] . " ";
                //获取IP
        $word .= getIP() . " ";
        $word .= "\n";
        $fh = fopen($filename, "a");
        fwrite($fh, $word);    
        fclose($fh);
    }
}
//获取IP地址,网上现成代码
function getIP() //get ip address
    {
        if (getenv('HTTP_CLIENT_IP')) 
        {
            $ip = getenv('HTTP_CLIENT_IP');
        } 
        else if (getenv('HTTP_X_FORWARDED_FOR')) 
        {
            $ip = getenv('HTTP_X_FORWARDED_FOR');
        } 
        else if (getenv('REMOTE_ADDR')) 
        {
            $ip = getenv('REMOTE_ADDR');
        } 
        else 
        {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return $ip;
    }
//获取浏览器信息,移动端,平板电脑数据还未加上。
 function getbrowser()
    {
        $Agent = $_SERVER['HTTP_USER_AGENT'];
        $browser = '';
        $browserver = '';

        if(ereg('Mozilla', $Agent) && ereg('Chrome', $Agent))
        {
            $temp = explode('(', $Agent);
            $Part = $temp[2];
            $temp = explode('/', $Part);
            $browserver = $temp[1];
            $temp = explode(' ', $browserver);
            $browserver = $temp[0];
            $browserver = $browserver;
            $browser = 'Chrome';
        }
        if(ereg('Mozilla', $Agent) && ereg('Firefox', $Agent))
        {
            $temp = explode('(', $Agent);
            $Part = $temp[1];
            $temp = explode('/', $Part);
            $browserver = $temp[2];
            $temp = explode(' ', $browserver);
            $browserver = $temp[0];
            $browserver = $browserver;
            $browser = 'Firefox';
        }
        if(ereg('Mozilla', $Agent) && ereg('Opera', $Agent)) 
        {
            $temp = explode('(', $Agent);
            $Part = $temp[1];
            $temp = explode(')', $Part);
            $browserver = $temp[1];
            $temp = explode(' ', $browserver);
            $browserver = $temp[2];
            $browserver = $browserver;
            $browser = 'Opera';
        }
        if(ereg('Mozilla', $Agent) && ereg('MSIE', $Agent))
        {
            $temp = explode('(', $Agent);
            $Part = $temp[1];
            $temp = explode(';', $Part);
            $Part = $temp[1];
            $temp = explode(' ', $Part);
            $browserver = $temp[2];
            $browserver = $browserver;
            $browser = 'Internet Explorer';
        }
        if($browser != '')
        {
            $browseinfo = $browser.' '.$browserver;
        } 
        else
        {
            $browseinfo = $_SERVER['HTTP_USER_AGENT'];
        }
        return $browseinfo;
    }

这样,在你的站点根目录上就会生成mylogs.txt文件,你通过http://你的域名/mylogs.txt可以直接访问。


转载:WordPress彩色标签云的实现
今天介绍下彩色标签云的实现。标签云能够为读者提供发现更多有用信息的入口。在wordpess自带的小工具里也有标签云,但是相对来说比较单调。彩色标签云则看起来更加友好一些。

functions.php中代码:

//标签云
function colorCloud($text) { 
$text = preg_replace_callback('|<a (.+?)>|i', 'colorCloudCallback', $text); 
return $text; 
} 
function colorCloudCallback($matches) { 
$text = $matches[1]; 
$color = dechex(rand(0,16777215)); 
$pattern = '/style=(\'|\")(.*)(\'|\")/i'; 
$text = preg_replace($pattern, "style=\"color:#{$color};$2;\"", $text); 
return "<a $text>"; 
} 
add_filter('wp_tag_cloud', 'colorCloud', 1);

将以上代码放到functions.php中,方便在其他地方调用。

sidebar.php调用代码

在sidebar.php中调用如下代码:

<?php wp_tag_cloud('smallest=8&largest=24&number=50'); ?>

样式表什么的你可以自行优化,这里就不多讲了。


转载:wordpress评论添加数学验证码
如今wordpress中垃圾评论越来越多了,当然wordpress中的akismet工作的也很不错,但是它偶尔会出现误判。给博客加一个简单的数学验证码不失为一个好办法,唯一值得考虑的就是可能会影响用户的体验,所以本文针对这个情况通过记录cookie值,判断是否为老用户,从而实现博客评论只需填写一次验证码,这样就能大大提高用户体验。接下来介绍一下。

添加数学验证码

将以下代码添加到functions.php中:

//评论数学验证码
function spam_protection_math(){
//获取两个随机数, 范围0~9
$num1=rand(0,9);
$num2=rand(0,9);
//最终网页中的具体内容
echo "<p class='comment-form-author'><input type='text' name='sum' class='math_textfield' value='' size='25' tabindex='4'> $num1 + $num2 = ?"
."<input type='hidden' name='num1' value='$num1'>"
."<input type='hidden' name='num2' value='$num2'>"
."<label for='math' class='small'> 验证码</label></p>";
 
}
function spam_protection_pre($commentdata){
$sum=$_POST['sum'];//用户提交的计算结果
switch($sum){
//得到正确的计算结果则直接跳出
case $_POST['num1']+$_POST['num2']:break;
//未填写结果时的错误讯息
case null:wp_die('错误: 请输入验证码.');break;
//计算错误时的错误讯息
default:wp_die('错误: 验证码错误,请重试.');
}
return $commentdata;
}
if($comment_data['comment_type']==''){
add_filter('preprocess_comment','spam_protection_pre');
}
// 增加: 錯誤提示功能

spam_protection_math()

插入到你的评论框模板的合适位置,在网址信息下方,评论框上方。如下图所示:

判断是否评论过

先根据浏览器的Cookie来判断是不是已经评论过的,如果是已经发表评论的,则显示欢迎XX回来的字样,不需要再填写验证码。并且用户可以自由编辑自己的个人信息,php代码如下:

<?php if(isset($_COOKIE['comment_author_email_'.COOKIEHASH]) && isset($_COOKIE['comment_author_'.COOKIEHASH]))  : ?>
<?php $comment_author=$_COOKIE['comment_author_'.COOKIEHASH];  ?>
<div id="span-list">
<div id="commentwelcome">
<?php printf(__(' <span>%1s, 欢迎回来!</span>'), $comment_author); ?>
</div>
<div id="welcome">
<div id="welcome1">
<?php printf(__('<span>不是 %s ?</span> '), $comment_author); ?>
</div>
</div>
<div id="author_info">
//你的个人信息框代码,即姓名,邮箱,网址框,不需要加入数学验证码
</div>
</div>
<?php endif; ?>

为了方便编辑个人信息,本文采用了jquery控制个人信息框的出现和隐藏,首先要做的是给个人信息框也就是姓名,邮箱,网址加上以下div标签,这里不需要加入数学验证码,因为该用户已评论过:

<div id="author_info"></div>

jquery代码如下:

// 评论欢迎语
/*http://www.tennfy.com*/
     //开始
if($('input#author[value]').length>0){ //判断用户框是否有值
$("#author_info").css('display','none'); //将id为author_info的对象的display属性设为none,即隐藏
var change='<span id="show_author_info" style="cursor: pointer; color:#2970A6;display:block;">编辑信息 &raquo;</span>'; //定义change,style是定义CSS样式,让他有超链接的效果,color要根据你自己的来改,当然你也可以在CSS中定义#show_author_info来实现,这样是为了不用再去修改style.css而已!
var close='<span id="hide_author_info" style="cursor: pointer;color: #2970A6;">关闭 &raquo;</span>'; //定义close
$('#welcome').append(change); //在ID为welcome的对象里添加刚刚定义的change
$('#welcome').append(close); // 添加close
$('#hide_author_info').css('display','none'); //隐藏close
$('#show_author_info').click(function() { //鼠标点击change时发生的事件
$('#author_info').slideDown('slow'); //用户输入框向下滑出
$('#commentwelcome').css('display','none');//隐藏欢迎语
$('#welcome1').css('display','none');//隐藏欢迎语
$('#show_author_info').css('display','none'); //隐藏change
$('#hide_author_info').css('display','inline'); //显示close
$('#hide_author_info').click(function() { // 鼠标点击close时发生的事件
$('#author_info').slideUp('slow'); //用户输入框向上滑
$('#commentwelcome').css('display','inline');//显示欢迎语
$('#welcome1').css('display','inline');//显示欢迎语
$('#hide_author_info').css('display','none'); //隐藏close
$('#show_author_info').css('display','inline'); })})}

这里值得注意的是写代码的时候分为3个控制逻辑:1、判断用户是否为管理员2、判断用户是否以前评论过3、判断用户是否为新用户。以上代码为第二个控制逻辑。大概的思路为:

if 1
//出现欢迎管理员回来代码
elseif 2
//出现上文代码
else 
//出现个人评论框以及数学验证码代码 
end

小结

css样式需要根据主题的特点来写,通过记录cookie可以提高用户的体验,是一个比较好的办法。效果可以参见我的博客下方评论。