カスタムテーマを作成しました。かなり複雑なので、ここでは皆さんの正気のために巨大なコードブロックを投稿しません。
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
を返します。非常に奇妙な!
上記のスクリーンショットからわかるように、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
メインクエリからの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 );
私はあなたがすでにすべてのプラグインを無効にしていることに気付きました。あなたが述べたように、あなたが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を持っていなければ、それがどのフィルタを使うかを決めるためにソースコードを見るのと同じくらい簡単で、あなたのテーマの関数ファイルの中でこれらのカスタムフィルタを探すのです。
あなたの質問に対する部分的な答えとして、ヘッダーファイルを削除することに対する混乱を説明できます。 wp_enqueue_scripts
フックはwp_head()
の中で起動され、それはあなたのheader.php
ファイルの中になければなりません。あなたのダミーヘッダファイルにはこれが含まれていないので、DA_script_enqueue
関数全体がまったく実行されていません。 header.phpファイルを削除すると、WordPressは代わりにデフォルトのwp_head
を使用します。
最初の問題では、wp_head()
関数を失うことなく、少しずつ問題を解決して少しずつデバッグする必要があります。
wp_enqueue_script
を使うとき、おそらくin_footer
パラメータにtrue
を渡します。そうであれば、あなたのsearch.php
が一番下のget_footer()
関数を呼んでいることを確認してください。