Странная проблема с pre_get_posts и $ query-> is_page ()

Следующий бит кода использовался в моем фиктивном плагине для перенаправления не зарегистрированных пользователей со страницы 173 (ID) на sample-page (slug). Код работает хорошо. Но только сегодня я понял, что код вызывает Уведомления в Firefox.

Проблема возникла, когда я попытался установить статическую страницу в качестве первой страницы в меню «Настройки»> «Чтение».

Примечание. Попытка получить свойство не-объекта в /wp-includes/class-wp-query.php в строке 3760

Примечание. Пытается получить свойство не-объекта в /wp-includes/class-wp-query.php в строке 3762

Примечание. Попытка получить свойство не-объекта в /wp-includes/class-wp-query.php в строке 3764

При нескольких проверках я понял, что причиной этого является следующий бит кода. И, что конкретно, проблема is_page(173) с is_page(173) .

 add_action('pre_get_posts', function($query) { if( $query->is_main_query() && ! is_admin() && ! is_user_logged_in() && $query->is_page(173) ) { wp_redirect(home_url('/sample-page')); exit(); } }); 

Я попытался перейти от $query->is_page(173) к is_page(173) – результат такой же.

Чтобы протестировать пустую установку, я попытался отключить все плагины и установить тему TwentySixteen по умолчанию и переустановить WordPress, чтобы получить новую установку. Я ввел следующий код в functions.php TwentySixteen, и с DEBUG, вот что я получил . (Уведомление находится под черной областью заголовка, просто нажмите Ctrl + A, чтобы увидеть их). Вы можете проверить перенаправление с этой страницы ( 173 ) на эту страницу без уведомления.

В чем проблема с моим кодом?

Solutions Collecting From Web of "Странная проблема с pre_get_posts и $ query-> is_page ()"