计算机编程 类目

学会编程我们能够和计算机沟通

WordPress 分开显示评论与 Pingback

WordPress 中的留言有三种类型,分别是普通评论、Pingback 和 Traceback。Pingback 和 Trackback 都是别人对你文章的引用,两者有一些区别,但是实际上差不多。就我博客上的评论来说 Pingback 类型的居多,因为这种引用是自动完成的。

当你在文章中引用另外一篇文章的地址时,Wordpress 就会给对应的网站发送Pingback,当这些网站收到回复时,就会将 Pingback 的信息显示在评论中。关于这 Pingback 和 Trackback 的更多对比,可以阅读下这篇文章 WordPress中的Ping、Trackback与Pingback:概念、区别与运用

当然,最终是否显示 Pingback/Trackback 类型的评论完全由主题自行决定。有些主题选择干脆只显示普通类型的评论,而有些主题显示全部评论。dangopress 主题选择了后者,这也是大多数主题的方式。但是如果将这几种类型的评论混杂在一起,难免显得有点混乱,所以在这里本文介绍一种将普通评论与 Pingback/Trackback 区分显示的方法,这个方法参考自 WordPress 2.7 Trackbacks 的两种处理方法 - NeoEase

除了做基本的区分之外,我们还希望能够分别显示普通评论与 Pingback/Trackback 的数目。最终的显示效果参考本博客:

查看全文

dangopress: 简单的自适应主题

dangopress 是我自己独立创作的第一款免费主题,主打简洁风格,双栏布局。主题包含代码高亮、支持第三方 CDN、支持网站统计分析、侧栏跟随等等功能,以及许多细节上的打磨和优化,有兴趣的同学可以下载体验。主题已经上传到 Github,可以免费下载,暂时还没有打算提交到官方主题库中。

我的性子比较喜欢折腾,主题经常换来又换去,下载了别人放出的主题之后,一定要亲手“打磨”过之后才会使用。几次下来,新鲜劲刚过,又开始寻觅新的主题。从开始使用 WordPress 开始,我就有一个愿望可以自己亲手实现一份主题,现在愿望实现了,感觉真不错。

主题的许多素材都是来源自网上,最初原型是来自 牧风 现在的主题,同时也参考了很多 Neoease 博客上的元素。当然还有,例如邮件回复、归档页面、最近评论等等,都来自网上各位同仁的分享。所以主题完成之后,我就立马上传到 Github 上了。

主题安装方法:

  • 推荐 Github Release 页面下载最新版本;
  • 从 Github 下载最新代码:
  • # git clone https://github.com/dangoakachan/dangopress
    

    将 clone 下来的整个目录压缩成 zip 包。

到 WordPress 后台上传安装主题,主题有几个自定义的选项,请自行设置。如果有问题需要帮忙,欢迎在本博客评论。

dangopress 主题特性

dangopress 双栏设计,白底黑字,属于简洁风格。

主题拥有以下特性(包括但不仅限于):

  1. 集成侧栏跟随滚动功能
  2. 支持添加百度分享、百度统计以及 Google Analytics 统计代码,主题后台可配置;
  3. 默认自带代码高亮功能,通过 Google Code Prettify 实现;
  4. 评论支持回复邮件提醒功能,邮件内容已定制;
  5. 支持将博客静态文件上传到 CDN,主题后台可配置 CDN 地址前缀(本博客的一些静态文件都是托管在 OSS 上的,关于 WordPress 使用 OSS 可以参考我之前写得一篇文章);
  6. 侧栏包括最新、随机、置顶以及热评文章,以 Tab 选项卡形式呈现;
  7. 简单的多种宽度设备(手机、平板、电脑)样式自适应,效果见下方;

查看全文

Yoast Breadcrumbs 文章页面删除标题

Yoast Breadcrumbs是一款很出色的面包屑插件,它可以在文章、分类、归档、搜索等页面显示导航,SEO 的效果也非常好。

装上该插件后,搜索引擎也有很好的理解和展示, 下面是我上一篇文章的 Google 搜索结果:

Snip20130928_3

我博客上安装的是作者的另外一款很有名的插件 WordPress SEO by Yoast,默认集成了Yoast Breadcrumbs的功能。

但是,该插件有一个不足的地方是,在文章页面中,仍然会在导航栏上显示标题,这样标题就在两处地方重复显示了,那么如何解决这个问题,下面我们介绍两种方法。

方法一

在 functions.php 文件中增加以下代码(来自 How to remove page title from breadcrumb):

< ?php 
if (function_exists('yoast_breadcrumb')) { 
    $opt = get_option("wpseo_internallinks"); 
    $sep = ( isset($opt['breadcrumbs-sep']) && $opt['breadcrumbs-sep'] != '' ) ? $opt['breadcrumbs-sep'] : '»'; 
    $breadcrumbs = yoast_breadcrumb('', '', false); 
    $linksArr = split($sep, $breadcrumbs); 
    array_pop($linksArr); 
    echo '<nav id="breadcrumbs">'.implode($sep,$linksArr).''; 
}
?>

查看全文

mark-directory: 快速目录切换工具

今天早上看到@程序员的那些事转的一条微博《使用命令行快速操控文件系统》,文中作者介绍了他提升工作效率的一个命令行小工具,可以快速切换工作目录,我觉得蛮有意思的,小小研究了下。在原工具的基础上,我在 Github fork了一个改进的版本 —— mark-directory,具体可以看文章最后。

工作原理

这个小工具的工作原理非常简单,相信大家扫过一遍原文就可以明白,它创建了一个隐藏目录(例如~/.marks),目录里面存放的文件都是常用目录的软链接。我们可以将这个软链接看作一个书签,通过访问这个书签我们可以方便地跳转到相应的目录。

具体实现

这个小工具也提供了相应的命令来管理这些软链接文件,当前支持的是jump, mark, unmark和marks。

以上4个操作命令的实现代码如下所示,非常简单:

export MARKPATH=$HOME/.marks
function jump { 
    cd -P "$MARKPATH/$1" 2>/dev/null || echo "No such mark: $1"
}
function mark { 
    mkdir -p "$MARKPATH"; ln -s "$(pwd)" "$MARKPATH/$1"
}
function unmark { 
    rm -i "$MARKPATH/$1"
}
function marks {
    ls -l "$MARKPATH" | sed 's/  / /g' | cut -d' ' -f9- | sed 's/ -/\t-/g' && echo
}

将这段代码放到~/.bashrc 文件中。接下来我们来尝试使用这个小工具。

查看全文

Bash Pitfalls: 编程易犯的错误(四)

上一篇文章参见Bash Pitfalls: 编程易犯的错误(三)。这一篇翻译得不是非常满意,时间比较赶,请见谅,如果有问题可以在本文后方留言,大家一起深入探讨。

36. [ -n $foo ] or [ -z $foo ]

这个例子中,$foo 没有用引号引起来,当$foo包含空格或者$foo为空时都会出问题:

$ foo="some word" && [ -n $foo ] && echo yes
-bash: [: some: binary operator expected

$ foo="" && [ -n $foo ] && echo yes
yes

正确的写法是:

[ -n "$foo" ]
[ -z "$foo" ]
[ -n "$(some command with a "$file" in it)" ]

[[ -n $foo ]]
[[ -z $foo ]]

37. [[ -e "$broken_symlink" ]] returns 1 even though $broken_symlink exists

这里-e 选项是看文件是否存在,当紧跟的文件是一个软链接时,它不看软链接是否存在,而是看实际指向的文件是否存在。所以当软链接损坏时,即实际指向的文件被删除后,-e 的结果返回1。

查看全文

Bash Pitfalls: 编程易犯的错误(三)

上一篇文章参见Bash Pitfalls: 编程易犯的错误(二)

24. for arg in $*

和大多数 Shell 一样,Bash 支持依次读取单个命令行参数的语法。不过这并是$*或者$@,这两种写法都不正确,它们只能得到完整的参数列表,并非单独的一个个参数。

正确的语法是(没错要加上引号):

for arg in "$@"

# 或者更简单的写法
for arg

在脚本中遍历所有参数是一个再普遍不过的需求,所以 for arg 默认等价于 for arg in "$@"。$@使用双引号后就有特殊的魔力,每个参数展开后成为一个独立的单词。("$@"等价于"$1" "$2" "$3" ...)

下面是一个错误的例子:

for x in $*; do
   echo "parameter: '$x'"
done

执行的结果为:

$ ./myscript 'arg 1' arg2 arg3
parameter: 'arg'
parameter: '1'
parameter: 'arg2'
parameter: 'arg3'

正确的写法:

for x in "$@"; do
   echo "parameter: '$x'"
done

执行的结果为:

$ ./myscript 'arg 1' arg2 arg3
parameter: 'arg 1'
parameter: 'arg2'
parameter: 'arg3'

查看全文

Bash Pitfalls: 编程易犯的错误(二)

上一篇文章参见Bash Pitfalls: 编程易犯的错误(一)

13. cat file | sed s/foo/bar/ > file

你不应该在一个管道中,从一个文件读的同时,再往相同的文件里面写,这样的后果是未知的。

你可以为此创建一个临时文件,这种做法比较安全可靠:

# sed 's/foo/bar/g' file > tmpfile && mv tmpfile file

或者,如果你用得是 GNU Sed 4.x 以上的版本,可以使用-i 选项即时修改文件的内容:

# sed -i 's/foo/bar/g' file

14. echo $foo

这种看似无害的命令往往会给初学者千万极大的困扰,他们会怀疑是不是因为 $foo 变量的值是错误的。事实却是因为,$foo 变量在这里没有使用双引号,所以在解析的时候会进行单词拆分文件名展开,最终导致执行结果与预期大相径庭:

msg="Please enter a file name of the form *.zip"
echo $msg

这里整句话会被拆分成单词,然后其中的通配符会被展开,例如*.zip。当你的用户看到如下的结果时,他们会怎样想:

Please enter a file name of the form freenfss.zip lw35nfss.zip

查看全文

WordPress 侧栏实现 Tab 选项卡

有时候我们希望在侧栏放更多内容,但是容易让侧栏显得过长。网上比较常见的做法是,用 Tab 选项卡的形式将多个小工具合并到一起,例如热门文章、最新文章、随机文章等等,这样同样的空间包含的内容更多,用户体验也增强不少。

网上可以下到不少类似的插件,也有很多非插件的实现方式。我使用了William同学WordPress侧边栏JQuery版TAB选项卡文章中介绍的方法来实现,效果可以看我的博客侧栏:

查看全文