實現多個shortcode只引用一次js

WordPress有一個shortcode功能,我經常用。

但是一直存在一個問題:如何實現「一個頁面使用多次相同shortcode只引用一次它所需要的.js」?

雖然知道有has_shortcode()方法,但是此方法只能在拿到當前post_content時才可以用,然而在首頁以及分類列表中,是無法使用的。

這時,我試圖拿到首頁及分類列表的content文本內容,但是在網上搜尋半天,沒有找到。

此時我靈機一動:乾脆用global全局變量來判斷這個shortcode到底用了幾次,只有第一次使用時才引用!

global $markmap_script_once;
if ($markmap_script_once != 1) {
  ...
  $markmap_script_once = 1;
}

有點暴力,但滿足了我的需求。

例如我內置的markmap:

add_shortcode( 'markmap', function ( $atts, $content) {
	$markmap_height = "360px";
	if (isset($atts["height"])) {
		$markmap_height = $atts["height"] . "px";
	}
	global $markmap_script_once;
	if ($markmap_script_once != 1) {
		wp_enqueue_script( "markmap-autoloader.js", 'https://ejsoon.win/wp-content/uploads/2023/11/markmap-autoloader.js' ); 
		echo <<<mmstyle
<style>
  .markmap > svg {
    width: 100%;
    height: 100%;
  }
</style>
mmstyle;
		$markmap_script_once = 1;
	}
	return <<<mmstr
	<div class='markmap' style='height: $markmap_height;'>$content</div>
mmstr;
});

Google及Chatgpt並不是全能的,最終還是要靠自己啊!

Leave a Comment