将ID动态添加到标题标签

时间:2013-04-05 作者:nwong212

如何使用php向wordpress网站上的每个标题标记动态添加id属性?我想让每个标题标签(h1、h2、h3、h4、h5、h6)都有一个唯一的id,这样它就像:<h1 id="this_is_sparta">This Is Sparta</h1>

所以我可以使用<a href="#this_is_sparta">Go to This Is Sparta</a>

我已经为这个问题寻找了几个小时的解决方案,但我似乎什么也找不到,所以如果有人能帮忙,我将不胜感激!

如果必须手动完成,一切都可以,我只需要一种更简单的方法来为客户端执行此操作。

3 个回复
SO网友:Squazz

我也遇到了同样的困境,我找到了这个插件: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;
}

SO网友:Rajeev Vyas

您可以使用the_content 筛选,然后在内容中查找所有标题标记并添加ID。

要在内容中查找标题标记,可以使用正则表达式或类似simple\\u html\\u dom的东西。看看this

SO网友:RRikesh

中有一个函数wp-includes/formatting.php 调用sanitize_title_with_dashes 您可以使用它。

<h1 id="<?php echo sanitize_title_with_dashes( get_the_title() ); ?>"><?php the_title(); ?></h1>
如果您的标题是This Is Sparta 输出将为this-is-sparta.

结束

相关推荐

卸载插件中的.php文件以清除数据库

我知道WordPress通过提供uninstall.php 钩您只需放置清理代码,它就会工作。但我的问题是,我已经看到了几个插件,它们使用的是插件文件中定义的函数uninstall.php 文件我的理解是,如果插件已经被禁用,并且用户正在删除它,那么这些功能可能无法访问。我的假设是否正确,或者是否有我不知道的WordPress魔术?