Najwyraźniej odpowiedź brzmi TAK, powinienem się martwić . Po przeprowadzeniu niektórych badań odkryłem, że ostrzeżenie wydaje się być związane z błędnymi konfiguracjami na serwerze, na którym znajduje się WordPress (tj. Problem z moim serwerem, a nie WordPress).
Typowe błędne konfiguracje:
- Serwer nie ma DNS, więc nie może dowiedzieć się, kim jest „example.com”, nawet jeśli jest on sam.
- Administratorzy serwerów, próbując zabezpieczyć się przed błędami, zablokowali żądania „sprzężenia zwrotnego”, więc nie mogą faktycznie oddzwonić do siebie.
- Serwer uruchamia coś o nazwie „mod_security” lub podobną, która aktywnie blokuje połączenie z powodu martwej konfiguracji mózgu.
Problem w moim przypadku był spowodowany przez moją zaporę ogniową (pfSense), która domyślnie ma „Wyłącz odbijanie NAT” (wymieniona jako częsty powód # 2).
Na samym serwerze próbowałem nawiązać połączenie za pomocą usługi telnet, a wynik był następujący:
$ telnet external.server.hostname.com 19235
Próbuję XXX.XXX.XXX.XXX ...
telnet: Nie można połączyć się ze zdalnym hostem: Przekroczono limit czasu połączenia
Aby to naprawić, musiałem odznaczyć opcję Wyłącz odbicie NAT na mojej zaporze ogniowej. W moim przypadku było to w interfejsie internetowym pfSense w System-> Advanced-> Firewall / NAT.
Źródło: http://forum.pfsense.org/index.php?topic=3473.0
Teraz mogę się połączyć ze sobą (na samym serwerze) przez zaporę ogniową:
$ telnet external.server.hostname.com 19235
Próbuję XXX.XXX.XXX.XXX ...
Połączony z external.server.hostname.com.
Znakiem ucieczki jest „^]”.
i nie otrzymuję już ostrzeżenia PHP o wp-cron.
Zrozumiałem to po przeczytaniu tej szczegółowej odpowiedzi dotyczącej wp_cron
, wyjaśniając, jak to działa.
Krótka odpowiedź: dodaj to do definicji w pliku wp-config.php: zdefiniuj ('ALTERNATE_WP_CRON', prawda);
Naprawdę długa odpowiedź dla masochistów: Zaplanowane posty nie są teraz i nigdy nie były „zepsute”. Twórcy WordPress nie mogą tego naprawić, ponieważ nie ma nic do naprawienia.
Problem polega na tym, że twój serwer z jakiegoś powodu nie może poprawnie wykonać procesu wp-cron. Ten proces jest mechanizmem czasowym WordPressa, obsługuje on wszystko, od zaplanowanych postów po wysyłanie pingbacków do pingów XMLRPC itp.
Sposób działania jest dość prosty. Za każdym razem, gdy ładuje się strona WordPress, wewnętrznie WordPress sprawdza, czy musi odpalić wp-cron (porównując aktualny czas z ostatnim uruchomieniem wp-cron). Jeśli musi uruchomić wp-cron, wówczas próbuje nawiązać połączenie HTTP z samym sobą, wywołując plik wp-cron.php.
To połączenie z powrotem istnieje z jakiegoś powodu. wp-cron ma wiele do zrobienia, a ta praca wymaga czasu. Opóźnianie przeglądania strony przez użytkownika podczas wykonywania wielu czynności jest złym pomysłem, więc nawiązując połączenie z sobą, może uruchomić program wp-cron w osobnym procesie. Ponieważ sam WordPress nie dba o wynik wp-cron, czeka tylko sekundę, a następnie wraca do renderowania strony internetowej dla użytkownika. Tymczasem wp-cron, po uruchomieniu, działa, dopóki nie zostanie ukończony lub skończy mu się czas wykonywania.
To połączenie HTTP powoduje awarię niektórych źle skonfigurowanych systemów. Zasadniczo WordPress działa jak przeglądarka internetowa. Jeśli Twoja witryna to
http://example.com/blog , WP zadzwoni na
http://example.com/blog/wp-cron.php, aby rozpocząć proces. Jednak niektóre serwery po prostu nie mogą tego zrobić z jakiegoś powodu. Wśród możliwych przyczyn:
- Serwer nie ma DNS, więc nie może dowiedzieć się, kim jest „example.com”, nawet jeśli jest on sam .
- Administratorzy serwerów, próbując zabezpieczyć się przed błędami, zablokowali żądania „sprzężenia zwrotnego”, więc nie mogą faktycznie oddzwonić do siebie.
- Serwer uruchamia coś o nazwie „mod_security” lub podobną, która aktywnie blokuje połączenie z powodu martwej konfiguracji mózgu.
- Coś innego.
Chodzi o to, że z jakiegokolwiek powodu twój serwer WWW jest skonfigurowany w jakiś niestandardowy sposób, który uniemożliwia WordPressowi wykonanie jego pracy. WordPress po prostu nie może tego naprawić.
Jeśli jednak masz ten warunek, istnieje obejście tego problemu. Dodaj to do definicji w pliku wp-config.php:
zdefiniuj („ALTERNATE_WP_CRON”, prawda);
Ta alternatywna metoda wykorzystuje podejście przekierowujące, które powoduje, że przeglądarka użytkownika otrzymuje przekierowanie, gdy cron musi się uruchomić, dzięki czemu natychmiast wracają do witryny, podczas gdy cron nadal działa w połączeniu, które właśnie zrzuciło. Ta metoda jest czasem nieco niepewna, dlatego nie jest domyślna.
Źródło: http://wordpress.org/support/topic/scheduled-posts-still-not-working-in-282#post-1175405
Jak stwierdzono w tym świetnym i szczegółowym poście, jeśli nie masz kontroli nad konfiguracją serwerów lub, w stosownych przypadkach, środowiskiem - obejście
zdefiniuj („ALTERNATE_WP_CRON”, prawda);
w pliku wp-config.php.
allow_url_fopen
włączone?