post_content, $match ) ) { $tags = \implode( ', ', $match[1] ); \wp_add_post_tags( $post->post_parent, $tags ); } return $id; } /** * Filter to replace the #tags in the content with links * * @param string $the_content the post-content * * @return string the filtered post-content */ public static function the_content( $the_content ) { $protected_tags = array(); $protect = function( $m ) use ( &$protected_tags ) { $c = count( $protected_tags ); $protect = '!#!#PROTECT' . $c . '#!#!'; $protected_tags[ $protect ] = $m[0]; return $protect; }; $the_content = preg_replace_callback( '##is', $protect, $the_content ); $the_content = preg_replace_callback( '#<(pre|code|textarea|style)\b[^>]*>.*?]*>#is', $protect, $the_content ); $the_content = preg_replace_callback( '#<[^>]+>#i', $protect, $the_content ); $the_content = \preg_replace_callback( '/' . ACTIVITYPUB_HASHTAGS_REGEXP . '/i', array( '\Activitypub\Hashtag', 'replace_with_links' ), $the_content ); $the_content = str_replace( array_reverse( array_keys( $protected_tags ) ), array_reverse( array_values( $protected_tags ) ), $the_content ); return $the_content; } /** * A callback for preg_replace to build the term links * * @param array $result the preg_match results * @return string the final string */ public static function replace_with_links( $result ) { $tag = $result[1]; $tag_object = \get_term_by( 'name', $tag, 'post_tag' ); if ( $tag_object ) { $link = \get_term_link( $tag_object, 'post_tag' ); return \sprintf( '', $link, $tag ); } return '#' . $tag; } }