web-dev-qa-db-ja.com

wp_footer()フックからスタイルをデキュー/削除し、wp_head()フックに追加できますか?

このエンキュースタイルのwp_footer()フックの登録を解除し、フックwp_head()でサイトのトップに追加する必要があります。これは可能ですか?

テーマを最適化してW3Cで検証します。W3Cの要件の1つは、すべてのスタイルが<head></head>というタグ内にあることです... Crayon Syntax Highlighterという特定のプラグインと、このプラグインを使用していますページの下部にスタイルを挿入しています(おそらくwp_footer()フックを使用)。

スクリプトの名前/ IDはcrayonです: enter image description here

私はこのすべての機能を試しましたが、成功しませんでした:

wp_deregister_style( 'crayon' );
wp_dequeue_style( 'crayon' );
remove_action( 'wp_enqueue_style' , 'crayon' , 10 );

wp_deregister_style( 'crayon-css' );
wp_dequeue_style( 'crayon-css' );
remove_action( 'wp_enqueue_style' , 'crayon-css' , 10 );
1
rafaelfndev

ソースコード を見ると、wp_enqueue_style( 'crayon' )Crayon::enqueue_resources()の中で呼び出されていることがわかります。 Crayon::the_content()またはCrayon::wp_head()Crayon::wp_headのコードは次のとおりです。

if (!CrayonGlobalSettings::val(CrayonSettings::EFFICIENT_ENQUEUE) || CrayonGlobalSettings::val(CrayonSettings::TAG_EDITOR_FRONT)) {
  CrayonLog::debug('head: force enqueue');
  // Efficient enqueuing disabled, always load despite enqueuing or not in the_post
  self::enqueue_resources();
}

これは、特定の設定が有効になっている場合にのみスタイルをエンキューします。そうでなければ、スタイルはthe_contentが既に出力された後に起動するwp_headフィルタからのみキューに入れられます。

2つの選択肢があります。

  1. ヘッダーのすべてのページにCSSをエンキューさせる
  2. CSSを必要なページのみでフッターにエンキューする
3
Nathan Johnson

うーん..あなたの問題についてもう少し詳しい情報(あなたが修正する必要がある特定のファイルやスクリプトのような)を提供できれば、質問は私にはあまり明確ではありません。私が理解したことから、私はあなたを助けようとします。まず、本当に必要でない限り、プラグインは避けましょう。ブラウザからページの読み込みを開始したときに、最初にダウンロードしたスクリプトがタグの間にあるため、それらのスクリプトをフッターに移動します。 footer.phpまたは/public_html/wp-content/themes/yourtheme/footer.php)Webページは、最初に視覚化する必要があるすべてのデータのレンダリングを開始します。最初はページの先頭から、最後にフッターのスクリプトです。 .phpファイルCrayon Syntax Highlighterが問題を引き起こしているのではないでしょうか。この<!-- W3TC-include-js-head -->を閉じる</body>タグの前に置くようにしてください。

wp_enqueue_scriptsを使いたい場合は、この例を見てください。

function themeslug_enqueue_style() {
    wp_enqueue_style( 'core', 'style.css', false ); 
}

function themeslug_enqueue_script() {
    wp_enqueue_script( 'my-js', 'filename.js', false );
}

add_action( 'wp_enqueue_scripts', 'themeslug_enqueue_style' );
add_action( 'wp_enqueue_scripts', 'themeslug_enqueue_script' );

これが助けになれば幸いです。 :)

1
JakeDD