如何在Wordpress中使用functions.php自动将ID添加到标题

时间:2019-03-25 12:34:49

标签: wordpress

我想知道如何为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元素。是否有更好的方法来做我想做的事情,或者通常这种事情实施起来并不明智?

1 个答案:

答案 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();