• Gelöst Regenpfeifer

    (@regenpfeifer)


    Hallo,

    ich habe auf meine WordPress-Seite mit Hilfe des Plugins Ultimate Member vollständig auf privat geschaltet und leite für nicht angemeldete Besucher automatisch auf eine andere Website weiter.

    Dies funktioniert grundsätzlich problemlos. Allerdings erhalte ich von den Tests auf den Website-Zustand eine kritische Fehlermeldung:

    Seiten-Cache wurde erkannt, aber die Antwortzeit des Servers ist immer noch langsam

    Soweit ich sehen kann, hängt diese kritische Fehlermeldung direkt damit zusammen, dass die Website auf privat geschaltet ist. Sobald ich mit Ultimate Member zumindest den Zugriff auf die Homepage / Startseite freigebe, verschwindet die Fehlermeldung. Ich möchte aber, dass auch die Startseite privat bleibt und dies funktioniert wie gesagt auch gut – bis auf die Fehlermeldung.

    Ich habe bereits versucht, den entsprechenden Test des Website-Zustands zu deaktivieren und dazu folgendes Snippet aktiviert:

    add_filter( 'site_status_tests', function( $tests ) {
    unset( $tests['async']['good_response_time_threshold'] );
    return $tests;
    });

    Leider zeigt dies keine Wirkung. Vermutlich stimmt die Anweisung in dem Snippet nicht. Ich finde aber auch keine aussagekräftige Dokumentation zu den verschiedenen Tests für den Website-Zustand, die mir für mein Problem weiterhilft.

    Hat jemand eine Idee, wie ich diese Fehlermeldung loswerden könnte?

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 12 Antworten – 1 bis 12 (von insgesamt 12)
  • Hallo,
    schau mal bitte in den folgenden Thread. Da werden einige Codebeispiele zu dem Thema genannt. Ansonsten steht grundsätzlich auch die Doku zur Verfügung.

    Viele Grüße
    Hans-Gerd

    Thread-Starter Regenpfeifer

    (@regenpfeifer)

    Besten Dank! Mit dem von dir genannten Link hat es funktioniert. Ich habe folgendes Snippet verwendet:

    function disable_full_page_cache_check( $tests ) {
    unset( $tests['async']['page_cache'] );
    return $tests;
    }
    add_filter( 'site_status_tests', 'disable_full_page_cache_check' );

    Danke auch für den Hinweis auf die Doku. Was ich dort allerdings vermisse, ist eine Auflistung der einzelnen Tests mit ihren „friendly names“, sodass man gezielt den jeweiligen Test finden kann, den man deaktivieren möchte.

    Habe ich da was übersehen oder gibt es so eine Auflistung nicht?

    Habe ich da was übersehen oder gibt es so eine Auflistung nicht?

    Ich habe da jetzt nicht weiter recherchiert. Auf den ersten Blick habe ich dazu auch noch nichts gesehen.

    Kannst du das Thema dann bitte als gelöst markieren, wenn das Problem damit für dich behoben ist:
    Gelöst
    Die Option findest du rechts in der Sidebar. Danke.

    Thread-Starter Regenpfeifer

    (@regenpfeifer)

    Danke. Das Problem ist soweit für mich gelöst und ich habe es entsprechend gekennzeichnet. Damit hatte ich nur noch gewartet, weil ich hoffte, dass sich vielleicht irgendwo eine genaue Auflistung der Tests finden würde. Momentan funktioniert die Lösung nach trial and error, aber nicht wirklich systematisch. Macht aber für mein konkretes Problem im Augenblick nichts 😉

    Vielen Dank dir und einen schönen Tag!

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    „Hilfe, ich habe irgendwo Code kopiert und ahnungslos in meine Website eingefügt, ohne überhaupt zu wissen, was die Funktion macht …“* 😀

    Wie funktioniert so ein Hook?

    Stell dir vor, du hast eine PHP-Funktion:

    function say_hello() {
      $name = "Erika Mustermann";
      echo 'Hallo' . $name;
    }

    Nun möchtest du, dass ein Programmierer den Namen ändern kann, ohne die Funktion umschreiben zu müssen. Dazu fügst du in der Funktion einen Hook ein:

    function say_hello() {
      $name = "Erika Mustermann";
      $name = apply_filters( 'say_hello_name', $name );
      echo 'Hallo' . $name;
    }

    Nun kann der Programmierer diesen Hook z.B. in seinem Theme verwenden:

    add_filter( 'say_hello_name', 'my_name' );
    function my_name( $name ){
      $name = "Regenpfeifer"; // $name geändert!
      return $name;
    }

    Der Filter bewirkt nun, dass vor Ausgabe des Namens die Variable $name mit „Regenpfeifer“ überschrieben wird. Das bewirkt, dass die Ausgabe dann in „Hallo Regenpfeifer“ geändert wird.

    Fassen wir zusammen:

    • Bei Hooks nachsehen, wo sie definiert sind und welche Parameter sie haben.
    • Dort, wo sie definiert sind, muss es auch Variablen geben, die durch den Filter überschrieben werden. Hier befindet sich die Information, die du benötigst – in deinem Fall „eine genaue Auflistung der Tests“.

    *Ist Copy/Paste schlecht? Nein, mache ich auch laufend. Allerdings ist es besser, wenn du zumindest ein grobes Verständnis dafür hast, was du da eigentlich kopiert hast und was es bewirkt.

    Thread-Starter Regenpfeifer

    (@regenpfeifer)

    Danke @pixolin, ich glaube, ganz so schlimm ist es nicht, dass ich einfach völlig planlos irgendwas gemacht habe. Es ist ja auch nichts Schlimmes passiert, ich brauchte halt Hilfe bei der Lösung meines Problems. Dabei habe ich schon versucht, mich zu informieren und auch exakt die Stellen in der Dokumentation konsultiert, zu denen du mir jetzt die Links gesandt hast. Auch ein dortiges Code-Beispiel habe ich verwendet. Das war, soweit ich sehe, grundsätzlich nicht falsch, lediglich der benötigte „friendly name“ des Tests fehlte mir.

    Ich habe ein sehr elementares Verständnis von PHP, bin aber kein Programmierer und habe auch keine detaillierten Kenntnisse der WordPress-Core-Dateien. Daher hatte ich hier gefragt, wie ich bei meinem Problem weiterkomme – wobei mir dankenswerterweise sehr gut geholfen wurde.

    Ich denke nach wie vor, dass die Dokumentation zu den Tests nicht sehr übersichtlich ist. Auch @hage konnte meine diesbezügliche Frage offenbar nicht aus dem Stand heraus beantworten.

    In der von dir genannten Quelle (https://core.trac.wordpress.org/browser/tags/6.2/src/wp-admin/includes/class-wp-site-health.php#L2707) habe ich den in meinem konkreten Fall benötigten Test (disable_full_page_cache_check) auch nicht gefunden. Oder diese Information ist so tief im Code vergraben, dass es m.E. schon sinnvoll wäre, sie in einer Dokumentation aufzubereiten.

    Jedenfalls ist für mich alles gut und ich werde euch hier hoffentlich so schnell nicht wieder belästigen.

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Danke @pixolin, ich glaube, ganz so schlimm ist es nicht, dass ich einfach völlig planlos irgendwas gemacht habe.

    Das sollte auch nicht als persönliche Beschimpfung rüberkommen (ist es auch nicht, oder?) und war natürlich etwas überspitzt.

    Das war, soweit ich sehe, grundsätzlich nicht falsch, …

    Ist doch schön, wenn man erfährt, dass man auf der richtigen Spur war. Das nächste Mal kommst du selbst zurecht. Super. Oder?

    Ich habe ein sehr elementares Verständnis von PHP, bin aber kein Programmierer …

    Geht mir genauso. Man kann sich aber gut durchfuchsen, wenn man weiß, wie’s geht.

    wobei mir dankenswerterweise sehr gut geholfen wurde.

    Aller Dank gehört Hans-Gerd. Ich hab nur einen unmaßgeblichen Kommentar geschrieben. Alles gut.

    Ich denke nach wie vor, dass die Dokumentation zu den Tests nicht sehr übersichtlich ist.

    Das Dokumentations-Team sucht händeringend nach Verstärkung. Wenn du am Wochenende noch nichts vorhast …

    Jedenfalls ist für mich alles gut

    Super.

    und ich werde euch hier hoffentlich so schnell nicht wieder belästigen.

    Nein, dann ist das bei dir völlig falsch angekommen. Sorry.

    Wir empfinden Fragen nicht als Belästigung und dass ich mir die Zeit genommen habe, zusätzlich zur ausreichenden Antwort von Hans-Gerd noch die Hintergründe zu erklären, hat auch nichts mit „Belästigung“ zu tun. Aber wie heißt es … „Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.“ Deshalb die Erläuterungen.

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    PS: Es lesen auch andere mit und vielleicht freut sich (wenigstens) jemand anders über die Hintergrund-Informationen. 🥲

    PS: Es lesen auch andere mit und vielleicht freut sich (wenigstens) jemand anders über die Hintergrund-Informationen.

    ja, in der Tat. Ich z. B. 👍

    Thread-Starter Regenpfeifer

    (@regenpfeifer)

    Danke @pixolin und@hage. Und nein, ich wollte auch nicht unfreundlich sein. Hier wurde mir ja schließlich auch sehr freundlich geholfen.

    Ich fürchte, ich war etwas genervt, weil ich trotz intensiven Suchens die nötigen Hinweise in der Dokumentation nicht finden konnte – und weil auch der von dir, @pixolin, genannte Link nicht wirklich weiterzuführen scheint.

    Dafür könnt ihr beide natürlich überhaupt nichts, im Gegenteil. Sorry für meine falsch platzierte Reaktion.

    Wenn ich weiß, wohin ich mich da wenden müsste, bin ich gerne bereit, mich zumindest beim Dokumentationsteam zu melden und das Problem zu schildern. Dann wird man sehen, wie sehr ich als Laie weiterhelfen kann. Gibt es da Ansprechpartner?

    Beste Grüße, der Regenpfeifer

    Hallo,
    Informationen dazu findest du auf der folgenden Seite.

    Allerdings finden die entsprechenden Diskussionen hauptsächlich im englischsprachigen Slack-Channel statt.

    Das bedarf leider einige Zeit, um sich da zurecht zu finden. 🤷‍♂️

    Viele Grüße
    Hans-Gerd

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    … und weil auch der von dir, @pixolin, genannte Link nicht wirklich weiterzuführen scheint.

    OK, dann gehe ich noch ein wenig ins Detail.

    Du verwendest den Hook site_status_tests. Dieser Hook wird in der Datei wp-admin/includes/class-wp-site-health.php in der Funktion get_tests() verwendet, um die Variable $tests zu überschreiben. (Wie Hooks funktionieren, habe ich bereits beschrieben.)

    Die in dieser Funktion weiter oben definierte Variable $tests ist ein assoziatives Array, das alle Tests aufführt, die durchgeführt werden. Du kannst also im Code nachlesen, welche Tests es gibt. Ich bin davon ausgegangen, dass du den Test des Seitencache ausschalten möchtest und dafür reicht es, page_cache (Zeile 2.642) mit der PHP-Funktion unset() aus dem Array zu entfernen:

    add_filter( 'site_status_tests', function( $tests ) {
    	unset( $tests['async']['page_cache'] );
    	return $tests;
    });

    Das von dir verwendete good_response_time_threshold ist nicht Teil des Arrays – das sollte so nicht funktionieren. Es gibt aber einen ähnlich klingenden Hook site_status_good_response_time_threshold, mit dem du den Zeitwert, der als akzeptable Ladezeit verwendet wird, ändern kannst:

    /* 
      * Wert auf 3 Sekunden erhöhen
      * (unrealistischer Wert)
      */
    add_filter( 'site_status_good_response_time_threshold', 6000 );

    Die Dokumentation findest du unter site_status_good_response_time_threshold, die Funktion findest du wieder in der Datei wp-admin/includes/class-wp-site-health.php, etwas weiter unten (Zeile 3321).

    In WordPress 6.1 wurden einige Funktionen eingeführt, um die Performance von WordPress weiter zu verbessern. Zum Test der Cache-Funktion gab es einen Blog-Beitrag, im dem auch der Filter site_status_good_response_time_threshold erläutert wird: New cache Site Health checks in WordPress 6.1.

    Das richtet sich zugegeben nicht an Anwender, sondern Entwickler die sich dann in den Code weiter einlesen möchten. Anwender können die Empfehlung zur Performance-Optimierung einfach ignorieren.

    Übrigens gibt es noch eine Möglichkeit, den Tests des Seiten-Cache zu umgehen: Du brauchst nur in der wp-config.php oberhalb von /* That's all, stop editing! Happy publishing. */ die Zeile

    define( 'WP_ENVIRONMENT_TYPE', 'local' );

    einzufügen. (Erlaubte Werte sind local, development, staging, and production, wobei der Cache-Test nur für den Standardwert production ausgeführt wird.

Ansicht von 12 Antworten – 1 bis 12 (von insgesamt 12)

Das Thema „Test für Website-Zustand deaktivieren“ ist für neue Antworten geschlossen.