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並不是全能的,最終還是要靠自己啊!