今我在使用我網站的一個功能jsonnote時,發現不能用了。經查,原因是wordpress近期的版本更新,去掉了之前默認裝載的Jquery。
這個很難查到,不管搜尋英文還是中文網站,都沒有一個網站發篇文章來講這件事,以及解決辦法。
後來還是靠google AI才找到解決辦法,那就是在相應的地方加上這句:
wp_enqueue_script('jquery');
我曾經在十年前,很熟悉jquery,但是因為我知道這將是過時的技術,所以後來我就棄用了。更早之前我還熟悉flash動畫製作,但是我當時也知道flash將是一個過時的東西。
所以這個問題,有一個更好的解決辦法,那就是把jquery改寫為原生js。
jQuery(document).ready(function($){
var data = {
action: 'json_post',
jsondata: jutxt,
id: $juid
}
$.post("$admin_url", data, function(response) {
$(".jud").text(response);
$(".jud").removeClass("hide");
setTimeout(function () {
$(".jud").addClass("hide");
}, 1200);
});
});
改成原生js:
const data = new URLSearchParams({
action: 'json_post',
jsondata: jutxt, // 假設此變數已在外部定義
id: $juid // 假設此變數已在外部定義
});
// 發送 POST 請求
fetch("$admin_url", {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: data
})
.then(response => response.text()) // 取得回傳文字
.then(responseText => {
// 選取所有 class 為 .jud 的元素
const judElements = document.querySelectorAll('.jud');
judElements.forEach(el => {
// 設置文字並移除 hide class
el.textContent = responseText;
el.classList.remove('hide');
// 1.2 秒後重新加上 hide class
setTimeout(() => {
el.classList.add('hide');
}, 1200);
});
})
.catch(error => console.error('Error:', error));
值得注意的是,
jQuery(document).ready(function($){
並不等同於
document.addEventListener('DOMContentLoaded', () => {
因為前者如果頁面加載完畢,仍然會執行,但是後者如果是頁面已經加載完成才走到,則不會執行。這也是一個不小的坑。
我剛才看了一下,wp版本是 6.9.4,jquery 還能用。
wp_enqueue_script 是添加在哪個位置?我去看看是不是無意中添加了。
不過 jquery 確實也過時了,我也打算修改成標準 js