我也遇到了同样的困境,我找到了这个插件:Add IDs to Header Tags, 而且它对帖子也很有效。(我不以任何方式隶属于该插件)。
为了使其也适用于页面,我必须对代码进行更改,这将在本支持页面上解释:Not adding IDs
开发人员似乎不活跃,也不支持插件,所以如果你发现一些问题,很遗憾,你必须自己解决。但是这个插件是一个很好的起点。
在下面的代码中,我删除了“is\\u single()”检查,这样代码就可以在页面和帖子上运行。此外,我删除了一些“额外”代码,使其符合OP的问题。
//Author URI: http://stephanis.info
add_filter( \'the_content\', \'add_ids_to_header_tags\' );
function add_ids_to_header_tags( $content ) {
$pattern = \'#(?P<full_tag><(?P<tag_name>h\\d)(?P<tag_extra>[^>]*)>(?P<tag_contents>[^<]*)</h\\d>)#i\';
if ( preg_match_all( $pattern, $content, $matches, PREG_SET_ORDER ) ) {
$find = array();
$replace = array();
foreach( $matches as $match ) {
if ( strlen( $match[\'tag_extra\'] ) && false !== stripos( $match[\'tag_extra\'], \'id=\' ) ) {
continue;
}
$find[] = $match[\'full_tag\'];
$id = sanitize_title( $match[\'tag_contents\'] );
$id_attr = sprintf( \' id="%s"\', $id );
$replace[] = sprintf( \'<%1$s%2$s%3$s>%4$s</%1$s>\', $match[\'tag_name\'], $match[\'tag_extra\'], $id_attr, $match[\'tag_contents\']);
}
$content = str_replace( $find, $replace, $content );
}
return $content;
}