Решение проблемы с предпросмотром черновиков в теме WPCommunity: ошибка 404

Решение проблемы с предпросмотром черновиков в теме WPCommunity: ошибка 404 при просмотре/

Владельцы сайтов на WordPress с темой WPCommunity иногда сталкиваются с проблемой: при попытке открыть предпросмотр черновика через фронтенд-редактор появляется ошибка 404, хотя запись существует и пользователь авторизован.

Эта проблема может возникнуть по разным причинам: после обновления WordPress, при смене темы, после установки нового плагина или даже без видимых причин. В этой статье я расскажу, как быстро диагностировать и исправить эту проблему.

WordPress по умолчанию не показывает черновики на фронтенде — это сделано для безопасности, чтобы обычные посетители не видели неопубликованные записи. Однако для авторизованных пользователей (особенно авторов записей) предпросмотр должен работать.

Проблема может возникнуть, если:

  • Обновилась версия WordPress и изменилась логика обработки запросов
  • Тема WPCommunity не учитывает особенности новой версии WordPress
  • Конфликтуют плагины, влияющие на запросы
  • Сбились настройки постоянных ссылок
  • Повреждены файлы темы или плагинов

Универсальное решение

Независимо от причины, проблема решается добавлением небольшого кода в functions.php вашей дочерней темы. Это безопасное решение, которое не требует правки основных файлов темы и сохранится после её обновления.

Шаг 1. Создайте дочернюю тему (если ещё не сделали)

Если у вас нет дочерней темы, создайте папку /wp-content/themes/wpcommunity-child/ и файл style.css с таким содержимым:

/*
 Theme Name:   WPCommunity Child
 Description:  Дочерняя тема для WPCommunity
 Template:     wpcommunity
 Version:      1.0.0
*/

Шаг 2. Добавьте код в functions.php

Создайте файл functions.php в папке дочерней темы и добавьте туда этот код:

<?php
/**
 * WPCommunity Child Theme Functions
 */

// Разрешаем просмотр черновиков на фронтенде для авторизованных пользователей
add_action('pre_get_posts', function($query) {
    // Только для основного запроса и только для авторизованных
    if (!is_admin() && $query->is_main_query() && is_user_logged_in()) {

        // Если это запрос к конкретному посту (по ID или предпросмотр)
        if ($query->get('p') || $query->get('name') || isset($_GET['preview'])) {
            $query->set('post_status', ['publish', 'draft', 'pending', 'future']);
        }
    }
});

Шаг 3. Сохраните и проверьте

  1. Сохраните файл
  2. Очистите кеш браузера (Ctrl+F5)
  3. Попробуйте снова открыть предпросмотр черновика

Код добавляется в хук pre_get_posts и изменяет параметры запроса: если пользователь авторизован и запрашивает конкретный пост (по ID или через параметр preview), в результаты включаются не только опубликованные записи, но и черновики (draft), ожидающие проверки (pending) и запланированные (future).

Дополнительная диагностика

Если код не помог, выполните простую диагностику:

  1. Проверьте статус записи в админке (Записи → Все записи)
  2. Сбросьте постоянные ссылки (Настройки → Постоянные ссылки → Сохранить)
  3. Отключите все плагины и проверьте предпросмотр
  4. Включите режим отладки WordPress, добавив в wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);

После этого откройте предпросмотр и посмотрите файл /wp-content/debug.log — там будут конкретные ошибки.

Альтернативное решение для конкретного пользователя

Если нужно разрешить предпросмотр только для автора записи (более безопасный вариант), используйте этот код:

add_action('pre_get_posts', function($query) {
    if (!is_admin() && $query->is_main_query() && is_user_logged_in()) {

        $post_id = $query->get('p');
        if ($post_id) {
            $post = get_post($post_id);
            // Разрешаем только если пользователь — автор поста
            if ($post && $post->post_author == get_current_user_id()) {
                $query->set('post_status', ['publish', 'draft', 'pending', 'future']);
            }
        }

        if (isset($_GET['preview']) && $_GET['preview'] == 'true') {
            $query->set('post_status', ['publish', 'draft', 'pending', 'future']);
        }
    }
});

Профилактика

Чтобы проблема не возвращалась:

  1. Всегда используйте дочернюю тему для любых изменений
  2. Регулярно обновляйте WordPress и плагины
  3. Делайте резервные копии перед обновлениями
  4. Проверяйте предпросмотр после каждого обновления

Ошибка 404 при предпросмотре черновиков в теме WPCommunity — распространённая проблема, которая легко решается добавлением нескольких строк кода. Предложенное решение безопасно, не влияет на производительность сайта и сохраняется при обновлениях темы.

Если вы нашли это руководство полезным, поделитесь им с другими пользователями WPCommunity. А если у вас остались вопросы — задавайте в комментариях!

Статья написана на основе практического опыта решения проблемы. Все права на торговые марки принадлежат их владельцам.

YUZAA
Комментарии: 3
Андрей
1 месяц
0

Автор, ты случаем не в курсе, как избавиться от этой надоедливой ссылки «Выйти», которая постоянно выскакивает, даже если ее скрываешь через CSS?

WPAcademy
автор
1 месяц
1

Чтобы отключить ссылку «Выйти», вставь код в functions.php:
/* Отключаем пункт "Выйти" в меню ---------------------------*/
add_filter('wpcommunity/user/logout_menu_item', '__return_false');
add_filter('wpcommunity/user/logout_menu_item', function($enabled) {
return false;
}, 9999);

Mejor Magazine
1 месяц
0

Благодарю, как раз наподобие этого и искал!