WordPress密码保护文章标题前提示文字内容删除/修改

因为有个别文章涉及版权,就想着给这些文章加个密码以防止内容被蜘蛛爬取或恶意采集。但加过密码后发现在首页和内容页的文章标题前,都有“密码保护:”字样,看着很不舒服。于是就想着将密保文章标题前的提示文字删除掉,就有了这篇文章。具体修改方法如下:

找到主题所在文件夹,找到其中function.php文件,用Editplus或UE打开,在内容最后的“?>”之前添加如下代码:

// 改密保文章标题前缀
 function change_protected_title_prefix() {
  return '%s';
 }
 add_filter('protected_title_format', 'change_protected_title_prefix');

代码这样写确实实现了将密码保护文章前提示文字删除的目的,但是,如果你有兴趣,我会从一个小白的角度告诉你为什么代码这样写达到了目的。为什么要从一个小白的角度呢?好吧,我不得不承认,因为我是个小白,所以只能从小白的角度分析……好了,下面看步骤吧:

1、  我们找到主题首页文件,如index.php,查看内容,可能内容会指向一个具体的控制页面。如:哈勃私语主题会指向blog.php或cms.php。

2、  找到相应控制文件:blog.php,发现控制标题的是the_title()函数,百度查找该函数,发现函数定义代码在wp-includes/post-templete.php,查看代码发现,返回内容是由get_the_title()函数生成,继续查找get_the_title()函数,源码如下:

function get_the_title( $id = 0 ) {
# 文章ID是传入参数;
$post = &get_post($id);
# 见解析1;
$title = isset($post->post_title) ? $post->post_title : '';
$id = isset($post->ID) ? $post->ID : (int) $id;
# 使用三元符号将文章title和id分别赋值给变量$title和$id;
if ( !is_admin() ) {
if ( !empty($post->post_password) ) {
$protected_title_format = apply_filters('protected_title_format', __('Protected: %s'));
$title = sprintf($protected_title_format, $title);
# 见解析2;
} else if ( isset($post->post_status) && 'private' == $post->post_status ) {
$private_title_format = apply_filters('private_title_format', __('Private: %s'));
$title = sprintf($private_title_format, $title);
# 这是处理私密文章标题前格式的,与密保文章类似,不再详解;
}
}
return apply_filters( 'the_title', $title, $id );
# 最后,返回$title,$id经过过滤钩子the_title上挂载的函数处理后返回的最终值;
}

解析1:变量$post赋值为get_post()返回值,该函数位于wp-includes/post.php,它根据文章ID从数据库中wp_posts表中返回该文章相关数据(如标题、正文、作者等)的一个数组,关于该表的详解见“WordPress数据库表及字段详解”。

解析2:如果文章有密码,则对变量$protected_title_format进行赋值,该值为值“__(‘Protected: %s’)”经过挂载在过滤钩子protected_title_format上的函数处理后的返回值。__()该函数位于wp-includes/l10n.php,单独一个参数时直接返回该值,也就是要处理的值其实为文本Protected: %s。然后对变量$title进行重新赋值,该值为原$title经过以$protected_title_format为格式的格式化函数处理的的值。看到这里我们基本就明白了,想改变标题前文字关键就在过滤钩子protected_title_format上,我们只要在该钩子上添加一个函数仅返回该标题格式即‘%s’即可,这样,你就懂了我们开始的代码为什么那样写了。当然,你可能还不懂什么是过滤钩子,不懂add_filter()函数和apply_filters()函数的作用机理,那么,详见文章“WordPress过滤钩子函数add_filter()、apply_filters()源码解析”吧!

本文转自:笨鸟博客

未经允许不得转载:哈勃私语 » WordPress密码保护文章标题前提示文字内容删除/修改

本文共1998个字 创建时间:2016年9月12日11:35   

分享到:更多 ()