在使用百度统计网站速度诊断功能时,因为js文件没有放在最后被扣掉了2分.展开查看具体问题,发现除了两处是自己定义的外,还有两处是加载和定义多说的js文件.

多说是一个不错的Wordpress评论插件,但是我们一般只在具体的文章和page页面才需要加载评论,首页和其他页面是不需要加载多说评论的.多说目前没有这样的按需加载的设置,于是自己尝试修改一下代码.查看了一下插件目录里的文件,发现相关的代码放在WordPress.php这个文件中,大概在336行,appendScripts这个函数.

	public function appendScripts(){
		static $once = 0;
		if ($once ++)
			return;
	?>
		 <script type="text/javascript">
		var duoshuoQuery =  <?php echo json_encode($this-> buildQuery());?> ;
		duoshuoQuery.sso.login += '&amp;redirect_to=' + encodeURIComponent(window.location.href);
		duoshuoQuery.sso.logout += '&amp;redirect_to=' + encodeURIComponent(window.location.href);
		 </script>
	 <?php
		$duoshuo_shortname = 'static';
		$url = 'http://' . $duoshuo_shortname . '.' . self::DOMAIN . '/embed.js';
		//?pname=wordpress&amp;pver=' . self::VERSION
		wp_register_script('duoshuo-embed', $url, array(), null);

		wp_enqueue_script('duoshuo-embed');
	}

我现在只需要在具体的文章和page页面才加载多说,并且要将http://static.duoshuo.com/embed.js放到尾部加载,所以修改appendScripts()函数的代码为:

public function appendScripts() {
		static $once = 0;
		if ( $once ++ )
			return;
		?>
		 <?php
         //判断是否是文章页和page页面
		if ( is_single() || is_page() ) {?>
			 <script type="text/javascript">
			var duoshuoQuery =  <?php echo json_encode( $this-> buildQuery() );?> ;
			duoshuoQuery.sso.login += '&amp;redirect_to=' + encodeURIComponent(window.location.href);
		    duoshuoQuery.sso.logout += '&amp;redirect_to=' + encodeURIComponent(window.location.href);
         </script>

		 <?php
			$duoshuo_shortname = 'static';
			$url = 'http://' . $duoshuo_shortname . '.' . self::DOMAIN . '/embed.js';
			//?pname=wordpress&amp;pver=' . self::VERSION
			//修改wp_register_script,将embed.js放到尾部加载
			wp_register_script( 'duoshuo-embed', $url, array(), '1.0',true );
			wp_enqueue_script( 'duoshuo-embed' );
		}

	}

下面还有个printScripts()函数,看注释是appendScripts()函数没有加载时,才执行,我修改完appendScripts()函数后发现已经正常加载,所以不需要再修改printScripts().

目前要求已经达到了,在首页不再加载多说的js文件,并且embed.js也已经放到网页尾部才加载.只是不知道作者放在首页加载是否有其他初衷?至少修改后,目前我还不有发现什么不妥.