过滤WordPress标签不加载指定内容

之前博客里写了一些关于VPN和翻墙的文章,填写了一些包含翻墙和高速VPN的敏感字眼,而博客右边栏启用了云标签的功能,会自动进行加载标签,阿里云快照检测到有违规字眼就把域名拦截了,要求我进行整改,当时想着直接删除违规标签,但是又怕影响站点的稳定性,所以就写了一段过滤的代码,把包含违规字眼的标签屏蔽不显示。

实现思路:在标签加载获取后循环标签集合,然后逐一判断标签是否含有指定字眼,若包含则直接从标签集合中移除该标签。

文件位置:\wp-includes\category-template.php

关键代码:注意下方代码的加粗部分,把加粗部分加到上述文件的指定位置即可。

function wp_tag_cloud( $args = '' ) {
	$defaults = array(
		'smallest'   => 8,
		'largest'    => 22,
		'unit'       => 'pt',
		'number'     => 45,
		'format'     => 'flat',
		'separator'  => "\n",
		'orderby'    => 'name',
		'order'      => 'RAND',
		'exclude'    => '',
		'include'    => '',
		'link'       => 'view',
		'taxonomy'   => 'post_tag',
		'post_type'  => '',
		'echo'       => true,
		'show_count' => 0,
	);

	$args = wp_parse_args( $args, $defaults );

	$tags = get_terms(
		array_merge(
			$args,
			array(
				'orderby' => 'count',
				'order'   => 'RAND',
			)
		)
	); // Always query top tags.term_group.ASC

	if ( empty( $tags ) || is_wp_error( $tags ) ) {
		return;
	}

	foreach ( $tags as $key => $tag ) {
		if ( 'edit' === $args['link'] ) {
			$link = get_edit_term_link( $tag->term_id, $tag->taxonomy, $args['post_type'] );
		} else {
			$link = get_term_link( (int) $tag->term_id, $tag->taxonomy );
		}

		if ( is_wp_error( $link ) ) {
			return;
		}

		$tags[ $key ]->link = $link;
		$tags[ $key ]->id   = $tag->term_id;
	}
	
	//屏蔽特殊标签
	foreach ($tags as $key => $tag) {
		if(strpos($tag->name,'翻墙')!==false)
		{
			unset($tags[$key]);
		}
	}

	// Here's where those top tags get sorted according to $args.
	$return = wp_generate_tag_cloud( $tags, $args );

	/**
	 * Filters the tag cloud output.
	 *
	 * @since 2.3.0
	 *
	 * @param string|array $return Tag cloud as a string or an array, depending on 'format' argument.
	 * @param array        $args   An array of tag cloud arguments.
	 */
	$return = apply_filters( 'wp_tag_cloud', $return, $args );

	if ( 'array' === $args['format'] || empty( $args['echo'] ) ) {
		return $return;
	}
	
	echo $return;
}

THE END