在老版本的wp主题中,经常可以看到一个名为wp_title
的函数,因为wp存在标题的横杠会被自动转义的问题,早期的常见解决办法是直接手搓一个组装逻辑。判断当前页面属性,然后自定义需求。比如下面这样一段程序:
<title>
<?php if (function_exists('is_tag') && is_tag()) {
single_tag_title('Tag Archive for "'); echo '" - ';
} elseif (is_archive()) {
wp_title(''); echo ' Archive - ';
} elseif (is_search()) {
echo 'Search for "'.wp_specialchars($s).'" - ';
} elseif (!(is_404()) && (is_single()) || (is_page())) {
wp_title(''); echo ' - ';
} elseif (is_404()) {
echo 'Not Found - ';
}
if (is_home()) {
bloginfo('name'); echo ' - '; bloginfo('description');
} else {
bloginfo('name');
}
if ($paged > 1) {
echo ' - page '. $paged;
} ?>
</title>
在wordpress 4.4版本之后,wp_head
函数接管了资源引入以及标题管理的工作,我们只需要在functions文件里加入这样一条语句:
function theme_slug_setup() {
add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'theme_slug_setup' );
接管归接管,智能转义的事儿并没有在4.0
时代被解决,而造成这一切的罪魁祸首,是wptexturize
函数: 这个函数用于将文本中的某些字符和符号转换成HTML实体。它可不光祸祸标题,文章内容它也照样祸祸,虽然它的初衷是为了提高用户站点的安全与稳定,但很多深受其扰的用户还是研究出了烈士断腕的办法,禁用wptexturize
:
全局禁用wptexturize
可以利用以下语句:
add_filter( 'run_wptexturize', '__return_false' );
局部禁用则可以参考如下的语句,但在博主的4.9.26版本的wp中,局部禁用并不发挥作用,最终还是选择了在设置页中添加了一个选项,以随时开关wptexturize
:
remove_filter('the_title', 'wptexturize');
查看了一下存放默认filter的文件default-filters.php
,确实有如上的filter
,语法上没有什么问题,不起作用可能是因为标题会被深加工多次吧 -_-!!!