web-dev-qa-db-ja.com

検索ページでwp_enqueue_scriptsが呼び出されていませんか?

カスタムテーマを作成しました。かなり複雑なので、ここでは皆さんの正気のために巨大なコードブロックを投稿しません。

functions.phpファイルには、次のフックが呼び出されています。

function DA_script_enqueue() {
    if( is_404() ){ 
        //load scripts with wp_enqueue_script() 
    }
    if( is_search() ){ 
        //load scripts with wp_enqueue_script() 
    }
}
add_action( 'wp_enqueue_scripts', 'DA_script_enqueue');

テーマがアクティブになったときにwordpressウェブサイトで起こることは、スクリプトがsearch.phpページに追加されないが、それらはdo非常に奇妙な404.phpページに追加されます!実際、die();ではページを削除することさえできません。

if( is_search() ){ 
   die('it works');
}

これにより、wp_enqueue_scriptsのフックオーバーライド内で条件が満たされないと考えられます。これがバグなのか、ロジックが間違っているだけで間違った関数を呼び出しているのかはわかりません。ロジックを機能させるには他に何ができますか?

ありがとう

編集:さて、更新:別のテーマで上記のコードを試したところ、本来の目的を果たす!私が今尋ねるべき質問は、is_search()trueを返すようにするために何ができるかということだと思います。これまでのところ、allプラグインを無効にし、index.phpからquery_posts()呼び出しを削除しましたが、まだ問題に直面しています:(

#2を編集:9時間デバッグした後(sigh)最終的に原因を見つけました問題(ただし、解決策はありません-まだ!)

テストwordpressサイトを作成し、カスタムテーマファイルにコピーしました。テーマに必要な最低限のファイルができるまで、それらを1つずつ削除し、問題の原因を突き止めました。 header.phpファイルがあると、is_search()falseを返します。非常に奇妙な!

enter image description here

enter image description here

enter image description here

上記のスクリーンショットからわかるように、header.phpファイルを削除するとすぐに、is_search()がtrueを返すので問題ありません。

いったい何がこの非常に奇妙な問題を引き起こしているのでしょうか? header.phpファイルを含む他のテーマがあり、それらは正常に動作します...

私はこれをいじり続けますが、念のためにソースファイルを示します:

search.php

<?php get_header(); ?>

search page

<?php get_footer(); ?>

functions.php

<?php
        // This function will load certain scripts on certain pages - saving on bandwidth and server resourses.
    function init_scripts()
    {
        if ( is_search() ) {
            die('Yes this is the search page loading from the init_scripts function');
        }
    }
    add_action( 'wp_enqueue_scripts', 'init_scripts' );
?>

header.php

header

#3を編集:ここに$wp_queryの出力もあります http://Pastebin.com/Z0DwDd2

#4を編集:今すぐ寝る時間なので、明日はまた別のショットを撮ろうと思います。誰かが興味がある場合に備えて、テーマファイルを次に示します。 https://drive.google.com/folderview?id=0B1zYR-LjR-j9NFV2ZXg3V0NJblk&usp=sharing

1
Joel Murphy

メインクエリからのvar_dumpは問題ありません、is_search()は本来あるべきようにtrueを返します。また、SQLクエリは検索ページに適しています。

これは、メインクエリが正常に実行された直後に何かがメインクエリを変更していることへの私の疑念をさらに深め、これはおそらくwp_enqueue_scriptsの前に起こります。

ここで最もありそうな原因はquery_postsです。私はしばらく前に、誰かがquery_postsやその他の悪いフィルタなどを使ったYOASTプラグイン(IIRC)であることが判明した問題を抱えていたことを覚えています。プラグインを無効にすることで問題は解決しました。

ここから始めるのに最適な場所は、テーマからquery_postsを検索し、query_postsのインスタンスがある場合はそれを整理することです。テーマに含まれていない場合は、プラグインを調べてください。プラグインを一つずつ非アクティブ化し、それぞれが非アクティブ化された後にテストします。あなたはこの方法で犯人を見つけることができるはずです

編集

wp_enqueue_scriptsのメインクエリをリセットしてから、スタイルとスクリプトがアクションからエンキューされているかどうかを確認してください。もしそうなら、それはis_search()がtrueを返すことを意味し、それは99.9%があなたのテーマやプラグインのどこかでquery_postsの使用を確認しています。

注:これは単なるテストで、解決策ではない

add_action( 'wp_enqueue_scripts', function ()
{
    wp_reset_query();
}, 9 );

編集2

私はあなたがすでにすべてのプラグインを無効にしていることに気付きました。あなたが述べたように、あなたがheader.phpを削除するとき、あなたの結果は大丈夫です。

デバッグ

残念ながら、あなたがリンクしているファイルはそれが基本的にあなたのthemesフォルダ内のすべてのテーマにすぎないので助けにはなりませんが、ここにいくつかの基本的なデバッグ情報があります

  • コードエディタには、テーマ内のすべてのファイル内の特定の文字列を検索するために使用できる、非常に優れた検索機能があります。問題はヘッダーにあるアクションフックにフックされているか、実際にはquery_postsにフックされていることが原因であると思われるので、wp_headのすべてのインスタンスを検索することから始めます。

  • header.phpは、wp_headアクションの単なるラッパーであるwp_head()関数を収容しています。 wp_enqueue_scriptsにフックされた多くのアクションフック(wp_headのような)があります。 wp_headにフックされているすべてのもののリストを取得するために this post をチェックしてください。問題がワイルドグースチェイスを始める前にwp_headにフックされたものによって引き起こされているかどうかをチェックするための簡単なデバッグチェックとして、単にwp_head()を削除してis_search()条件をチェックしてください。明らかに、is_search()がtrueを返す場合、wp_headにフックされた何かが問題を引き起こしています。

  • header.phpにはナビゲーションメニューのような機能も含まれており、これらの機能の大部分はフィルタに適用できます。これらの機能の1つによって使用されている悪いフィルタがあるかもしれません。上記の2つの箇条書きが無駄な場合は、これらの関数を1つずつ削除して、悪いAppleを特定します。あなたが悪いAppleを持っていなければ、それがどのフィルタを使うかを決めるためにソースコードを見るのと同じくらい簡単で、あなたのテーマの関数ファイルの中でこれらのカスタムフィルタを探すのです。

1
Pieter Goosen

あなたの質問に対する部分的な答えとして、ヘッダーファイルを削除することに対する混乱を説明できます。 wp_enqueue_scriptsフックはwp_head()の中で起動され、それはあなたのheader.phpファイルの中になければなりません。あなたのダミーヘッダファイルにはこれが含まれていないので、DA_script_enqueue関数全体がまったく実行されていません。 header.phpファイルを削除すると、WordPressは代わりにデフォルトのwp_headを使用します。

最初の問題では、wp_head()関数を失うことなく、少しずつ問題を解決して少しずつデバッグする必要があります。

0
Stephen

wp_enqueue_scriptを使うとき、おそらくin_footerパラメータにtrueを渡します。そうであれば、あなたのsearch.phpが一番下のget_footer()関数を呼んでいることを確認してください。

0
bedman