WordPress中is_singular()与is_single()的区别

in Wordpress with 0 comment

  笔者在添加转载声明的时候,用到一款插件:MyCopyRight,其效果正如你在本站文章内容结束后看到的转载声明一样。但是发现这个插件在单独建的页面中也有加载出来。可是我只想这个版权声明出现在文章的下方,而非所有页面的下方,但这款插件没有后台设置,于是这就要修改插件的代码了。
插件代码如下:

// for add to content ...
function myCopyRight($outer){
if(!is_singular()){ return $outer; }
global $post;
$pName = $post->post_title;
$pHref = get_permalink($post->ID);
$outer .= "\n<!-- Begin myCopyRight -->\n";
$outer .= '<link rel="stylesheet" href="'.WP_PLUGIN_URL.'/'.dirname(plugin_basename(__FILE__)).'/myCopyRight.css?v=5">';
$outer .= '<div id="myCopyRight">';
$outer .= '<p>本文链接:<a href="'. $pHref .'" rel="bookmark" title="本文固定链接 '. $pHref .'">'. $pName.'</a></p>';
$outer .= '<p>转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:<a href="'.get_settings('home').'">'.get_bloginfo('name').'.com</a>,谢谢!^_^</p>';
$outer .= '<br clear="all"></div>';
$outer .= "\n<!-- End of myCopyRight -->\n";
return $outer;
}
add_filter('the_content', 'myCopyRight');

  笔者不是程序员,但是凭着这几年研究wordpress建站,和程序员朋友的指导下,对代码也算是略懂了。再者有百度和Google这两位老师,可以看得出第三行" if(!is_singular()){ return $outer; } "这段代码是个判断句,如果是singular则输出下方代码的内容。那么这个is_singular就是关键了。
  简单的认为is_sigular()相当于is_single()||is_page()||is_attachment()没有什么大问题。也就是说,有is_single()||is_page()的地方,都可以替换成is_singular()但是其实上述这种理解不是太准确。来比较一下is_single()与is_sigular()的文档。is_single()是可以加参数的。参数可以是post_id,post_slug,post_title。
  那么我把is_singular替换成了is_single,这样wordpress判断是文章的页面下方才会加载,而普通的页面下方就不会加载这个转载声明了。
  同理,如果用到某些分享按钮的插件、收藏按钮,或者自己开发插件,懒得做后台的时候也可以区分文章,和页面是否加载内容。对于新手来说这些东西应该有用,如有什么地方说的不对,请高手指点。
附:WordPress中一些常见的判断函数

is_home() : 是否为主页
is_single() : 是否为内容页(Post)
is_page() : 是否为内容页(Page)
is_category() : 是否为Category/Archive页
is_tag() : 是否为Tag存档页
is_date() : 是否为指定日期存档页
is_year() : 是否为指定年份存档页
is_month() : 是否为指定月份存档页
is_day() : 是否为指定日存档页
is_time() : 是否为指定时间存档页
is_archive() : 是否为存档页
is_search() : 是否为搜索结果页
is_404() : 是否为 “HTTP 404: Not Found” 错误页
is_paged() : 主页/Category/Archive页是否以多页显示
is_singular() : 相当于is_single()||is_page()||is_attachment()

本文部分内容参考:胖子马博客 、 Gimhoy's Blog

Responses
2016lengh.gif2016kun.gif2016db.gif2016baojin.gif2016jk.gif2016kb.gif2016qq.gif2016zj.gif2016qiao.gif2016am.gif2016kk.gif2016qd.gif2016gg.gif2016lh.gif2016wq.gif2016gz.gif2016zhh.gif2016ll.gif2016shuai.gif2016kel.gif2016zk.gif