Меня попросили исправить проблему на сайте wordpress. Проблема вызвана тем фактом, что сообщения должны использоваться вместо страниц. Однако сайт запущен и работает, и самый быстрый вариант – исправить проблему с помощью взлома.
На сайте есть раздел событий, каждое событие представляет собой страницу (это проблема, на самом деле это должно быть сообщение). Чтобы иметь предстоящие и прошлые события, используется дата публикации, поэтому предстоящие события имеют статус «будущего».
Там есть страница списка событий, которая показывает их штраф, используя правильный query_post (). Хотя проблема возникает, когда вы переходите к реальному событию (которое является будущей страницей). Если вы вошли в систему как администратор, страница показывается, но если вы не вошли в систему, вы получите страницу 404.
Теперь, если у них есть должности, тогда «Будущее сейчас!» плагин решит эту проблему. У меня есть ощущение, что проблема заключается в том, чтобы переписать часть основных файлов WordPress.
Любые советы были бы замечательными, у меня много опыта работы с WordPress, поэтому даже если вы можете указать мне в правильном направлении.
Привет, Джейсон
[Обновить]
Спасибо maiorano84 за ваш подробный ответ. В конечном итоге я намерен перенести их на должности, но тем временем они попросили нас исправить это как можно скорее, не изменив URL-адреса (сегодня они отправили массовое электронное письмо со списком событий без проверки каких-либо ссылок)
Ваше решение в том числе post_status future не работает в этом случае, поскольку WordPress не доходит до стадии загрузки шаблона. Что-то в ядре wordpress останавливает его от того, чтобы дойти до этого. В идеале, если бы это был крючок, я мог бы использовать, чтобы переопределить это поведение, тем временем это будет отлично, но если это произойдет, я временно отредактирую основные файлы.
[Обновление 2]
Теперь я знаю две функции, которые нужно редактировать или использовать связанный с ними крючок.
Первый из нас is_404()
который нуждается в изменении, чтобы не добавлять будущие страницы как 404
Во-вторых, нам is_page()
нужно вернуть true, если страница будет в будущем
[Обновление 3]
Я нашел, как это сделать в ядре. Если вы перейдете на wp-includes/query.php
2682. Скопируйте это вместо старой функции, она работает правильно. Если у вас есть лучший способ, пожалуйста, дайте мне знать. Благодарю.
/** Future Pages **/ // Check post status to determine if post should be displayed. if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) { $status = get_post_status($this->posts[0]); $post_status_obj = get_post_status_object($status);; if ( !$post_status_obj->public ) { if ( $post_status_obj->protected ) { $this->is_preview = true; print_r($status); if ( 'draft' != $status ) { $this->posts[0]->post_date = current_time('mysql'); } else { $this->posts = array(); } } elseif ( $post_status_obj->private ) { if ( ! current_user_can($read_cap, $this->posts[0]->ID) ) $this->posts = array(); } else { $this->posts = array(); } } /** END **/