我想知道如何为Wordpress中帖子(不包括页面)中的每个标题元素实现唯一的ID。也就是说,如果两个标题相同,则它们应获得不同的ID。这些ID也应具有描述性。实际标题文字的破折号很棒。
我在网上找到了此代码:
// This function adds nice anchor with id attribute to our h2 tags for reference
// @link: http://www.w3.org/TR/html4/struct/links.html#h-12.2.3
function anchor_content_h2($content) {
// Pattern that we want to match
$pattern = '/<h2>(.*?)</h2>/';
// now run the pattern and callback function on content
// and process it through a function that replaces the title with an id
$content = preg_replace_callback($pattern, function ($matches) {
$title = $matches[1];
$slug = sanitize_title_with_dashes($title);
return '<h2 id="' . $slug . '">' . $title . '</h2>';
}, $content);
return $content;
}
add_filter('the_content', 'anchor_content_h2');
我在这里担心的是,两个相同的标题将获得相同的ID。它也仅适用于H2元素。是否有更好的方法来做我想做的事情,或者通常这种事情实施起来并不明智?
答案 0 :(得分:1)
有很多方法可以做到这一点,但是如果使用post_name,最终将得到一个唯一的,虚线的和描述性的值。 https://codex.wordpress.org/Class_Reference/WP_Post#Member_Variables_of_WP_Post
如果是我,我可能会将下面的代码放入相应的模板文件中。
the_title( '<h2 class="' . get_post_field( 'post_name', get_post() ) . '">', '</h2>' );
编辑-每个h2是否都与帖子无关?您可以在$ slug后面附加一个唯一的ID。
$slug = sanitize_title_with_dashes($title) . '-' . uniqid();