从帖子内容的html标记中排除标记链接

时间:2018-06-27 作者:Godwin Alex Ogbonda

请我想实现排除的目标<h2>, <a> and <img> 下面代码中的html标记。我试图用帖子内容中的链接替换标记关键字,并排除标记链接对上面列出的html标记的影响。

function link_words( $text ) {
    $tags = get_tags();
    if ( $tags ) {
        foreach ( $tags as $tag ) {
            $from = \'/\' . $tag->name . \'/\';
            $to = sprintf( \'<a href="%s">%s</a>\', esc_url( get_term_link( $tag ) ), esc_html( $tag->name ) );
            $text = preg_replace($from, $to , $text, 2);
        }
    }
    return $text;
}
add_filter( \'the_content\', \'link_words\' );
请大师进屋,有什么出路吗。我是新的wp功能编码。

1 个回复
SO网友:Bjorn

您的函数将替换内容中出现的每个tag\\u名称。也就是说,它将取代<h2>my-tag</h2> 进入<h2><a href="tag-link">my-tag</a></h2>.

我假设您手动将标记名添加到内容中。然后我会用标识符添加它们。例如,将标签添加到内容中,如下所示:

这是我的内容,我可以添加转换为如下链接的标记:{tag\\u name}

然后将功能更改为:

/**
 * Scan post content and replace {tag_name} with tag link
**/
add_filter( \'the_content\', \'post_content_change_my_tags_into_links\' );
function post_content_change_my_tags_into_links( $content ) {
  $tags = get_terms( \'post_tag\' );
  if ( $tags ) {
    foreach ( $tags as $tag ) {
      $change = \'{\'.$tag->name.\'}\';
      $into = sprintf( \'<a href="%s">%s</a>\', esc_url( get_term_link( $tag ) ), esc_html( $tag->name ) );
      $content = str_replace($change, $into , $content);
    }
  }
  return $content;
}
NOTE 1: 只有连接了帖子的标签才会转换为链接。

NOTE 2: 小心使用短函数名,如link_words() 如果函数位于全局命名空间中(直接在functions.php中)。重复的函数名将导致错误500。

结束

相关推荐

修改PRE_GET_POSTS中的查询操作打乱了我的导航菜单

我正在修改自定义存档页的查询。我正在使用pre\\u get\\u posts操作。我需要捕获一些GET变量来修改我的查询。对于一种自定义的帖子类型,它在归档页面上工作得很好,但对于其他类型的帖子,它却不起作用。它正在破坏我的导航菜单。add_action( \'pre_get_posts\', \'search_provider\'); function search_provider($query){ if(is_post_type_archive(array(\'provider\'