Googleページのヒントの提案に従うと、「JSレンダリングブロック」が推奨されており、jQuery
メインファイルに関連しています。WordPress:deffered jQueryの後に起動するインラインJSを移動する
私のサイトでは、いくつかのプラグインでWordPressを使用しています。プラグインの1つがJSをインラインで投げます。だから私がjQuery
をフッタに読み込むように動かすか、または "defer"モードを使ってロードすると、インラインコードが起動するとjQuery is not defined
になります。
すべてのインラインスクリプトを「キャッチ」するグローバルな解決策を見つけようとしていましたが、jQuery
のメインファイルがドキュメントの最後に実行された後でそれを遅延させました。
私は素晴らしいソリューションを書いてくれました。それは私の特定の状況のための非常にストレートな解決策ですが、私はthe_content
またはウィジェットの出力のフィルタとしてこれを作ることに失敗しました。私はこれをグローバルな解決策にしたいと思っています。だから私はどこかでJSの発砲を心配する必要はありません。
どのようにすれば効果がありますか?ここに私のコードは、これまでのところ、ショートを通るこの特定のケースのために:
/* Get shortcode HTML */
$widget_shortcode = do_shortcode($shortcode);
/* Take out all scripts into an array */
$delayed_scripts = array();
preg_match_all('#<script(.*?)</script>#is', $widget_shortcode, $match);
foreach ($match as $val){
$delayed_script = '<script '.$val[0].'</script>';
array_push($delayed_scripts, $delayed_script);
}
/* Remove all scripts from HTML */
$widget_shortcode = preg_replace('#<script(.*?)</script>#is', '', $widget_shortcode);
/* Echo filtered HTML */
echo $widget_shortcode;
そして、ちょうど終了</body>
タグの前に:
foreach ($delayed_scripts as $script) {
echo $delayed_script;
}
あなたができることは、あなたのプラグインに入ることです。どこに問題があるのかは、スクリプトが定義されている場所を見つけ、スクリプトの位置を9999で移動することです。そのインラインjsがフッタ内にある場合は2番目のことは、ちょうどPHPでパーサを作った。 'ob_start()'スクリプトを配列に入れてすべてのコンテンツを取得し、特定のスクリプトを最後に移動し、その後 'ob_get_clean()'を実行すると、同様の方法で完全なページを解析し、テーマ内のPHPでHTMLを操作できます。私はこれまで何度もやっています。 –
私はWordPressでフックする方法を探しています。他の方法はあまりにも積極的です... –