#javascript #wordpress #scripting #hook #enqueue
Вопрос:
Я пытаюсь заблокировать или удалить из очереди все сценарии страницы при загрузке, и когда пользователь выполняет какое-либо событие, такое как щелчок, прокрутка или нажатие клавиши, затем перезагрузите или повторно поставьте в очередь все сценарии. Я использую javascript для обнаружения событий, и когда происходит какое-либо событие, я вызываю AJAX для перехода к php-коду и ставлю в очередь сценарии. Я могу удалить из очереди сценарии, но я не могу снова поставить их в очередь. Вот мой код:
// Для Удаления Скриптов
add_action('wp_print_scripts', 'remove_all_scripts_ir'); function remove_all_scripts_ir(){ global $wp_scripts; $oldScripts = $wp_scripts-gt;queue; if(!is_admin()){ // Dequeue All Scripts $wp_scripts-gt;queue = array(); echo "lt;input type='hidden' name='reload-scripts' value='".wp_json_encode($oldScripts)."' id='reload-scripts' /gt;"; ?gt; lt;scriptgt; scripts = document.getElementById("reload-scripts").value; window.addEventListener("click",function(){ lt;?php echo "console.log('clicked_php')"; ?gt; postAjax("lt;?= admin_url("admin-ajax.php") ?gt;", { scripts:scripts,action:"ir_reload_scripts" }, function(data){ console.log(data); }); }); function postAjax(url, data, success) { var params = typeof data == 'string' ? data : Object.keys(data).map( function(k){ return encodeURIComponent(k) '=' encodeURIComponent(data[k]) } ).join('amp;'); var xhr = new XMLHttpRequest(); xhr.open('POST', url); xhr.onreadystatechange = function() { if (xhr.readyStategt;3 amp;amp; xhr.status==200) { success(xhr.responseText); } }; xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(params); return xhr; } lt;/scriptgt; lt;?php } }
Вот код для перезагрузки скрипта
add_action( "wp_ajax_nopriv_ir_reload_scripts", function(){ $scr = $_POST["scripts"]; $scrNew = str_replace("\"",""",$scr); echo $scrNew; $scripts = json_decode($scrNew); add_action( "wp_print_scripts",function() use ($scripts){ global $wp_scripts; $wp_scripts-gt;queue = $scripts; }); die(); });
Комментарии:
1. Вы не можете загружать сценарии без перезагрузки страницы