wordpress-logo

用is_tag()函数实现WordPress不同TAG页面显示不同内容

虽然Wordpress是一个博客系统,但如果利用好也是个强大的CMS(内容管理)系统。在Wordpress的实际使用中往往会创建很多的TAG标签页面,当文章多了一些TAG页面内容也开始丰富起来,但如果当作CMS来用的话这个千篇一律的TAG页面显然无法很好的满足突出当前TAG标签中心内容的用处。

这个时候我们就需要用到一个Wordpress自身具备的条件判断函数is_tag()。我们要想实现不同TAG显示不同内容就可以用它来判断,其用法为:

<?php if ( is_tag() ) { ?>//可以用 is_tag(‘tagname’) 判断具体的TAG页面<?php } ?>

利用上面的is_tag()函数,并在括号中添加TAG标签名称(注意:是链接名,也就是TAG别名),然后在相应的地方插入就可以使Wordpress不同TAG页面显示不同内容了。

WordPress显示当前文章分类的最新完整列表

通过识别当前文章所在的分类然后输出这个分类的最新文章列表,这就是本文所要实现的功能。得益于Wordpress众多的支持者,实现这个功能也不是难事,只需要通过一小段PHP代码就可以实现。

这段代码能实现控制输出文章列表的文章数量,还能对文章的标题进行截断(不然太长就会自动显示两段,这样不美观),如果你愿意还可以修改样式。可能有人会问为什么不用插件?大家都知道Wordpress有众多的插件能实现各种各样的功能,本文所述的这个功能亦是如此,不过个人觉得还是不要用插件的好。因为没那个必要,而且插件往往不灵活。说的有点多了,代码如下:

<?php
if ( is_single() ) :
global $post;
$categories = get_the_category();
foreach ($categories as $category) :
?>
<div class=”widget widget_pages”>
<h3>本分类最近更新</h3>
<ul>
<?php
$posts = get_posts(‘numberposts=15&category=’. $category->term_id);
foreach($posts as $post) :
?>
<li>
<a href=”<?php the_permalink(); ?>”><?php echo mb_strimwidth(get_the_title(), 0, 40, ‘…’); ?></a>
</li>
<?php endforeach; ?>
</ul>
</div>
<?php
endforeach; endif ; ?>

注意标点符号,然后复制粘贴到你文章页面所想要显示的位置就可以了(主题里面的php文件)。

WordPress评论IP地址显示为127.0.0.1的解决办法

穆童博客使用的是Wordpress程序,上次在更换了服务器之后不知为何所有新评论的IP地址都显示为127.0.0.1。刚开始我还没在意,觉得这也没什么。可是最近越发的觉得有必要解决这个问题。今天算式解决了,不过由于涉及到Wordpress程序文件的修改,所以就写篇日记以防日后升级程序后再次遇到这个问题。

问题原因

于是搜索了下,了解到导致这种情况的大概原因是:

一、启用了Wordpress缓存插件。
二、PHP版本或者Wordpress版本的问题。

我一看,php版本的问题应该不存在,因为wordpress安装环境是有要求的,如果php有问题那么应该安装wordpress的时候就出问题。wordpress版本也没问题,我用的是最新的版本而且这个版本之前是可以正确显示IP地址的。最后就是缓存插件的可能性了,因为我不久前就启用了这个插件,也几乎同时在启用这个插件之后评论IP地址就显示为127.0.0.1了。

解决办法

解决办法也挺简单的,我们只需要修改wordpress主目录下/wp-includes/目录里面的comment.php文件里面的一行代码就可以。首先打开comment.php文件后在里面搜索:$commentdata[‘comment_author_IP’]然后更具下面的提示对应修改(大约在1351行):

在/wp-includes/comment.php文件里找到下列代码:
$commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '',$_SERVER['REMOTE_ADDR'] );
将其修改为下列代码(可直接复制替换)
$commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '',$_SERVER['HTTP_X_FORWARDED_FOR'] );

也就是将$_SERVER[‘REMOTE_ADDR’]替换为$_SERVER[‘HTTP_X_FORWARDED_FOR’]就可以了。我在修改完后进行了测试,评论IP地址可以正常显示了。