在wordpress中为子主题添加过滤器

时间:2011-05-04 17:25:13

标签: wordpress wordpress-theming

我在wordpress中有一个基于二十世纪的儿童主题。

我的一些作者在帖子标题中有硬编码的网址,我想删除这些网址。

我将以下代码放在子主题的functions.php文件中,但它对帖子标题的显示没有影响:

add_filter( ‘the_title’, ‘ib_strip_tags_from_titles’ );
function ib_strip_tags_from_titles( $title ) {
  $title = strip_tags( $title );
  return $title;
}

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

strip_tags()仅删除HTML标记 - 在您的情况下,它会更改标题

Some Text <a href="http://someurl.com">LINK</a> Other Text

Some Text LINK Other Text

如果我理解正确,这就是你想要的:

function ib_remove_links_from_titles($title) {
    $title = preg_replace('/<a([^<]*)">([^<]*)<\/a>/', '', $title);
    return $title;
}
add_filter( 'the_title', 'ib_remove_links_from_titles' );

按照上面的例子,它将输出Some Text Other Text

请注意,鉴于您尝试使用strip_tags()完成任务,我假设“已编码的网址”(如您所述)包含在<a [...] ></a>标记中。如果不是这种情况,您需要一个与URL匹配的正则表达式。这更加棘手,取决于您的作者使用的URL是国际化/具有不同的域,并不仅仅是http://前言等等。

如果它们包含在标签中,我保证上述功能可以正常工作,如果没有,这个正则表达式会捕获大多数网址,但我无法保证在每种情况下工作:

(([A-Za-z]{3,9})://)?([-;:&=\+\$,\w]+@{1})?(([-A-Za-z0-9]+\.)+[A-Za-z]{2,3})(:\d+)?((/[-\+~%/\.\w]+)?/?([&?][-\+=&;%@\.\w]+)?(#[\w]+)?)?

你已经把它放在上面函数中的'/和/之间。