wp_enqueue_scripts nicht auf der Suchseite aufgerufen?

Ich habe ein benutzerdefiniertes Thema geschrieben. Es ist ziemlich komplex, deshalb werde ich hier keinen riesigen Codeblock für jedermanns Verstand veröffentlichen.

In meiner functions.php Datei habe ich folgenden Aufruf:

 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'); 

Was passiert auf meiner WordPress-Website, wenn mein Theme aktiviert ist, ist, dass der Seite 404.php keine Skripte hinzugefügt werden, aber sie werden auf der Seite 404.php hinzugefügt, was sehr merkwürdig ist! In der Tat funktioniert nicht einmal das Töten der Seite mit die();

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

Das führt mich zu der wp_enqueue_scripts , dass die Bedingung innerhalb der Hook-Override für wp_enqueue_scripts nie erfüllt wird. Ich bin mir nicht sicher, ob das ein Fehler ist oder ob meine Logik nur falsch ist und ich die falschen functionen anrufe. Was kann ich noch versuchen, damit meine Logik funktioniert?

Vielen Dank

Edit: Okay ein Update: Ich habe gerade den obigen Code in einem anderen Thema versucht und es tut was es soll! Ich denke, die Frage, die ich jetzt stellen sollte, ist, was ich tun kann, um is_search() , dass is_search() true zurückgibt? Bis jetzt habe ich alle Plugins deaktiviert und einen query_posts() Aufruf von index.php entfernt, aber immer noch mit Problemen konfrontiert 🙁

Edit # 2: Nach 9 Stunden Debugging ( seufz ) habe ich endlich gefunden, was das Problem verursacht (aber keine Lösung – noch nicht!)

Ich habe eine Testwordpress-Site erstellt und meine benutzerdefinierten Theme-Dateien kopiert. Ich löschte sie eins nach dem anderen, bis ich die für ein Theme benötigten minimalen Dateien hatte und dann entdeckte ich, was das Problem verursacht hat. Es scheint, eine header.php Datei zu haben macht is_search() false . Sehr eigenartig!

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Wie Sie aus den obigen Screenshots sehen können, ist alles in Ordnung, sobald ich die Datei header.php lösche, da is_search() true zurückgibt.

Was in aller Welt könnte dieses sehr seltsame Problem verursachen? Ich habe andere Themen mit einer Header.php Datei in ihnen und sie funktionieren gut …

Ich werde weiter damit spielen, aber hier sind meine Quelldateien nur für den Fall:

search.php :

  search page  

functions.php :

  

header.php :

 header 

Edit # 3: Hier ist die Ausgabe von $wp_query auch http://pastebin.com/Z0DwDd20

Edit # 4: Zeit für das Bett jetzt, ich denke, ich werde morgen noch einmal eine Chance haben. Hier sind die Theme-Dateien, falls jemand interessiert ist: https://drive.google.com/folderview?id=0B1zYR-LjR-j9NFV2ZXg3V0NJblk&usp=sharing

Solutions Collecting From Web of "wp_enqueue_scripts nicht auf der Suchseite aufgerufen?"

Die var_dump von der Hauptabfrage ist in Ordnung, is_search() gibt True zurück, wie es sollte. Außerdem sieht die SQL-Abfrage für eine Suchseite gut aus.

Dies vertieft meinen Verdacht, dass etwas die Hauptabfrage ändert, nachdem sie erfolgreich ausgeführt wurde, und dies geschieht höchstwahrscheinlich vor wp_enqueue_scripts .

Der wahrscheinlichste Schuldige ist hier query_posts . Ich kann mich noch vor einiger Zeit daran erinnern, dass jemand solch ein Problem hatte, das sich als YOAST-Plugin ( IIRC ) herausstellte , das query_posts oder einen schlechten Filter verwendete, und das Problem wurde getriggers, indem das Plugin deaktiviert wurde.

Der beste Ort, um hier zu beginnen, wäre, Ihr Thema nach query_posts zu query_posts und das zu sortieren, wenn es Instanzen von query_posts . Wenn es nicht in einem Thema ist, müssen Sie in Ihre Plugins schauen. Deaktivieren Sie Ihre Plugins nacheinander und testen Sie nach jeder Deaktivierung. Sie sollten in der Lage sein, den Schuldigen mit dieser Methode zu finden

BEARBEITEN

Versuchen Sie, die Hauptabfrage für wp_enqueue_scripts und prüfen Sie dann, ob Ihre Stile und Skripts aus Ihrer Aktion in die Warteschlange eingereiht werden. Wenn dies der Fall ist, bedeutet das, dass is_search() true zurückgibt. 99,9% bestätigen die Verwendung von query_posts irgendwo in Ihrem Theme oder Plugin.

HINWEIS: Dies ist nur ein Test und keine Lösung.

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

BEARBEITEN 2

Ich habe gerade festgestellt, dass du bereits alle Plugins deaktiviert hast. Wie Sie gesagt haben, wenn Sie header.php löschen, sind Ihre Ergebnisse in header.php .

Debuggen

Leider helfen die Dateien, mit denen Sie verlinkt sind, nicht, da es sich hauptsächlich um alle Themen in Ihrem Themenordner handelt, aber hier einige grundlegende Debug-Informationen

  • Code-Editoren haben recht gute Suchfunktionen, mit denen Sie in allen Dateien innerhalb Ihres Themes nach bestimmten Strings suchen können. Ich würde damit beginnen, nach allen Instanzen von query_posts , besonders innerhalb Ihrer functionsdateien, da das Problem durch etwas verursacht wird, das an einen Aktions-Hook wp_head ist, der sich in der Kopfzeile befindet oder tatsächlich mit wp_head

  • header.php die function wp_head() , die nur ein Wrapper für die Aktion wp_head . Es gibt viele wp_enqueue_scripts ( wie wp_enqueue_scripts ), die an wp_head . Überprüfen Sie diesen Beitrag , um eine Liste wp_head an wp_head . Als schnellen Debugging-Check, um zu überprüfen, ob das Problem von etwas verursacht wird, das an wp_head bevor Sie eine wilde Jagd wp_head() , löschen wp_head() einfach wp_head() und überprüfen Sie die is_search() Bedingung. Offensichtlich, wenn is_search() true wp_head verursacht etwas, das mit wp_head ist, das Problem.

  • header.php auch functionen wie Navigationsmenüs, und die meisten dieser functionen sind filterbar. Es kann sein, dass ein schlechter Filter von einer dieser functionen verwendet wird. Wenn die oben genannten zwei Punkte unfruchtbar sind, löschen Sie diese functionen nacheinander, um den schlechten Apfel zu bestimmen. Wenn Sie den schlechten Apfel haben, ist es so einfach, sich den Quellcode anzusehen, um festzustellen, welche Filter er verwendet, und dann nach diesen benutzerdefinierten Filtern in den functionsdateien Ihres Themas zu suchen

Als Teilantwort auf Ihre Frage kann ich Ihre Verwirrung über das Löschen der Header-Datei erklären. Der wp_enqueue_scripts Hook wird in der wp_head() , die sich in Ihrer Datei header.php . In Ihrer Dummy-Header-Datei ist dies nicht enthalten, sodass die gesamte DA_script_enqueue function überhaupt nicht ausgeführt wird. Wenn Sie die Datei header.php löschen, verwendet WordPress stattdessen einen Standardwert, der wp_head .

Für Ihr ursprüngliches Problem müssen Sie wieder auf Platz eins gehen und die Dinge ein wenig wp_head() , ohne dabei die wp_head() function zu verlieren.