当前位置:首页 » Blog, 前端 » 本页

WordPress标签使用小技巧,category_description()函数 In Blog, 前端  @2013-12-25 5,449 Vs

phpfun

 

最近在对自己的网站进行调整,也决定”洗心革面”一次,坚持有空就发一发文章,写写原创了!
今天就是这个原因而发现了大家常用的wordpress建站的一些小技巧和有用的东西,在下面一段里就分享给大家。

对于wordpress建站来说模板调用是一个很基本的知识,或许你只是改改Html或者写与Css就来更改你的网站外观,达到”更改模板”目的,但很多是候我们为了更好的让搜索引擎来更好的收录我们的页面就得用点wordpress PHP的函数知识了,当然我不是PHP专家,也不会大谈PHP函数的奥妙,不多说,说正题!

先说明一下网站的很多所谓的wordpress模板问题就是不太标准,还有待更新并且可以写的更灵活。

一、模板header.php 文件中针对不同页面或分类栏目的标题、关键字、描述的更改调用

我们先说标题(title),就拿本站来讲一下:

<title><?php if (is_single() || is_page() || is_search() ||is_archive()){wp_title(”,true); echo(‘ – ‘); bloginfo(‘name’); } else { bloginfo(‘name’);echo (‘- 用户体验,UI,视觉设计,交互设计,设计,前端开发’);} ?></title>

标题我们不是特别的要去更改,很多wordpress模板就是还算标准的了,这里我们就解释一下

is_single() 函数是每一篇文章内容页面的载体,由这个模板来控制
is_page() 函数是指我们新建的页面的载体,并由这个模板来控制
is_search() 函数不用说也知道是指的是搜索用的页面载体
is_archive() 函数为存档页,好像是把所有的发布的文章用一个结构而显示现来的页面
is_category() 分类栏目的存档页(这个我们要详细讲讲的)

前有”is_”其实是为了更好的识别这个函数的含义,是判断试的读法”是否为”:

还有一些在下面

is_home() 是否为主页
is_page() 是否为内容页(Page)
is_tag() 是否为Tag存档页
is_date() 是否为指定日期存档页
is_year() 是否为指定年份存档页
is_month() 是否为指定月份存档页
is_day() 是否为指定日存档页
is_time() 是否为指定时间存档页
is_404() 是否为 “HTTP 404: Not Found” 错误页
is_paged() 主页/Category/Archive页是否以多页显示

关键字这里我们不说,因为Wordpress貌似是没有对某篇文章单独设关键字,的入口,所以这个我们就不说了(有兴趣的朋友可以去下一个SEO插件就可以解决了)

进入我们今天的主题,描述提取的更改

<meta name=”description” content=”<?php if (is_home()) {echo (‘ithink是一个….(省略)’);} elseif (is_single()) { echo mb_strimwidth(strip_tags(apply_filters(‘the_content’,$post->post_content)),0,220);} ?>” />

绝大多数的模板的Header.php 描述都是都是像上面一样的结构 只对两个地方进行了提取输出。就是 is_home()首页,还有就是 is_single()文章内页;但往往还有一个页面的收录就会很重要就是分类栏目的收录,那里面集合了众多文章的集合,如果给他加上一个描述是有很大的益处的;

上面的那句话意思是 如果是首页就输出”ithink是一个….(省略)”这段话, elseif(判断) 又假如是文章内容页则在文章中提取第0到220个字符。

并没有分类目录这个栏目,那我们就这样处理

<meta name=”description” content=”<?php if (is_home()) {echo (‘ithink是一个….(省略)’);} elseif (is_single()) { echo mb_strimwidth(strip_tags(apply_filters(‘the_content’,$post->post_content)),0,220);} elseif (is_category()){echo category_description();} ?>” />

我们在后面加了 elseif (is_category()){echo category_description();}这段话,判断如果是在分类目录下面情况,则调用我们在后台已经设置好的栏目分类描述,通过 category_description()来提取。

OK好了,刷新分类栏目后就会出现本身设置好的文字了,意外发生了,你还会发现一个问题
就是描述那段话被P标签包适了,像这样:”<p>描述内容…</p>”,并且最后面还出现在分行

现在我们就来去掉wordpress分类描述的<p></p>标签以及换行

在前后多出一对<p></p>,让喜欢写干净简单代码的人很不舒服,有什么方法可以去掉这个呢,PHP的强大功能就来了,我们加个去掉Html标签的strip_tags()函数,就可以不用修改程序源码轻松干掉烦人的P标签了。具体代码如下:

<meta name=”description” content=”<?php if (is_home()) {echo (‘ithink是一个….(省略)’);} elseif (is_single()) { echo mb_strimwidth(strip_tags(apply_filters(‘the_content’,$post->post_content)),0,220);} elseif (is_category()){echo strip_tags(category_description());} ?>” />

另外一种单独写的是这么写

<?php if ( is_category() ) { ?>
<meta name=”description” content=”<?php echo strip_tags(category_description()); ?>” />
<?php } ?>

上面的方法可以简单去掉<p></p>,接下来我们要处理的是换行问题。
去掉头尾换行与英文空格有现成的函数就是trim()。

我们的代码就成这样了

<meta name=”description” content=”<?php if (is_home()) {echo (‘ithink是一个….(省略)’);} elseif (is_single()) { echo mb_strimwidth(strip_tags(apply_filters(‘the_content’,$post->post_content)),0,220);} elseif (is_category()){echo trim(strip_tags(category_description()));} ?>” />

经过php的两个函数strip_tags()和trim()的联合巧妙使用,现在已经得到像处子一样干净的分类描述了,但是呢,假如我模板里有很多地方需要调用分类描述,那不是要我添加好多个strip_tags()、trim()。

所以我们应该会有一个更好的方法,就是封装起来,直接调用一个简单的函数

对于封装的函数我们一想就会想到functions.php,他是wordpress模板功能的集合体

把下面这段代码插到你模板里的functions.php里,建议放到最后的 ” ?> “符号前面(最后面也有一个类似的函数,所以更放心点)

//对分类目录描述改写
function ithink_del_tags($str){
return trim(strip_tags($str));
}
add_filter(‘category_description’, ‘ithink_del_tags’);

模板里直接调用category_description()你就可以看到完美的分类描述了。

关于wordpress分类描述调用方法的补充

,英文可以的话直接到wordpress官方文档里看,就能详细了解category_description()函数的使用

1、在分类页里调用当前分类的描述,这个就是前面我们示例用的
<?php echo category_description(); ?>

2、调用指定分类id的分类描述,如我想调用分类id为3的分类描述
<?php echo category_description(3); ?>

3、调用指定分类slug(即分类别名)的分类描述,如我想调用分类别名为products的分类的描述
<?php echo category_description( get_category_by_slug(‘products’)->term_id ); ?>



打签» , ,   评论» 抢沙发

↓↓↓ 支持我们 ↓↓↓



我说两句 »

Ctrl+Enter

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。
返回顶部