过滤掉<!--More-->生成的#More锚链接

时间:2012-05-10 作者:David Arceneaux

回到我创作主题的天真时代,我必须让链接插入<!--more--> 不会将查看器转储到它生成的锚点。

我制作了一个小插件,包括:

function No_More_Link($buffer) {
  $inHTML[0] = \'/#more-\\d+/\';
  $outHTML[0] = \'\';
  return preg_replace($inHTML, $outHTML, $buffer);
}
ob_start("No_More_Link");
几年后,我想我可以做得更好,在主题的functions.php 文件:

function no_more_link ( $input ) {
  return preg_replace( \'/#more-\\d+/\', \'\', $input );
}
add_filter( \'get_permalink\', \'no_more_link\' );
这行不通。我试着把优先级提高到荒谬的水平。

我是否将过滤器应用于错误的对象?我错过了什么?

2 个回复
最合适的回答,由SO网友:shea 整理而成

您可以筛选the_content_more_link 钩住并移除#more-POST_ID 从链接:

function wpse_51806_strip_more_link( $more_link ) {
    global $id;
    return str_replace( "#more-$id", \'\', $more_link );
}
add_filter( \'the_content_more_link\', \'wpse_51806_strip_more_link\' );
它甚至被制成a plugin, 如果您对插件更熟悉,那么就使用代码片段。

SO网友:Michael

你是在要求重新发明轮子-http://codex.wordpress.org/Customizing_the_Read_More#Link_Jumps_to_More_or_Top_of_Page

一些背景:在/wp includes/post模板中添加了“更多链接”。php第217行(wp3.2中)作为get_the_content() 作用

  $output .= apply_filters( \'the_content_more_link\', \' <a href="\' . get_permalink() . "#more-{$post->ID}\\" class=\\"more-link\\">$more_link_text</a>", $more_link_text );

结束

相关推荐

Functions.php:从博客中排除类别

所以很明显,如何从模板中排除某些类别,但我不想修改4个模板,使它们忽略某个类别。有没有一种方法可以将某个类别从阅读设置的“博客”集中排除?我正在将博客分配到名为“博客”的页面。。。但显然,档案和搜索也需要对这一超出类别的内容视而不见。我宁愿在里面做functions.php