Посты, защищенные паролем, приводят к ошибке 404.

Вопрос или проблема

Я просто тестировал функцию постов, защищённых паролем, и когда я ввожу пароль, меня перекидывает на страницу 404. Введённый пароль был правильным, я проверил. В адресной строке указано: www.mydomain.com/wp-pass.php, но отображается страница 404. Независимо от того, правильный или неправильный пароль, должна быть показана информация о том, что пароль неверный или пост, который защищен. А не просто страница 404.

В чем может быть причина этого? Заранее благодарю за любые идеи.

Ок, сам разобрался! Я использовал add_filter, чтобы настроить форму ввода пароля и добавить CSS-классы. Всё в add_filter было либо старым, либо просто неправильным. Я нашел это в руководстве, но это был урок для меня. Никогда не доверяйте коду, найденному в интернете, если он не из Codex или от абсолютного эксперта.

ИЗМЕНЕНИЕ: Только что нашел этот же код и в Codex *facepalm. Над ним написано “ЭТО БОЛЬШЕ НЕ РАБОТАЕТ”, но зачем он всё ещё в Codex? Всем, у кого такая же проблема: если вы использовали код отсюда: Использование защиты паролем: текст формы пароля, у вас будут проблемы в новых версиях WordPress.

mfw когда правильный ответ от Wombat имеет -3

Извините, что не комментирую, но у меня пока нет никакого репозитория, и я просто хочу понять, что происходит на wordpress.stackexchange.com

Что именно Wombat должен добавить к этому? У нас есть установка WP с некоторым старым кодом (между прочим, Codex должен быть правильным для текущей версии WP) из codex.wordpress.com в файле functions.php нашей темы, чтобы настроить форму ввода пароля, например, как показано ниже:

<?php
function my_password_form() {
    global $post;
    $label="pwbox-".( empty( $post->ID ) ? rand() : $post->ID );
    $o = '<form action="' . esc_url( site_url( 'wp-pass.php', 'login_post' ) ) . '" method="post">
    ' . __( "Чтобы просмотреть этот защищенный пост, введите пароль ниже:" ) . '
    <label for="' . $label . '">' . __( "Пароль:" ) . ' </label><input name="post_password" id="' . $label . '" type="password" size="20" maxlength="20" /><input type="submit" name="Submit" value="' . esc_attr__( "Отправить" ) . '" />
    </form>
    ';
    return $o;
}
add_filter( 'the_password_form', 'my_password_form' );
?>

На каком-то обновлении WP форму изменили, но так как мы её перезаписываем нашим фильтром в functions.php, мы теперь получаем ошибку, описанную ОП после обновления. И теперь мы меняем wp-pass.php на /wp-login.php?action=postpass, как сказал Wombat (и как показано на текущей странице Codex), следующим образом:

<?php
function my_password_form() {
    global $post;
    $label="pwbox-".( empty( $post->ID ) ? rand() : $post->ID );
    $o = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
    ' . __( "Чтобы просмотреть этот защищенный пост, введите пароль ниже:" ) . '
    <label for="' . $label . '">' . __( "Пароль:" ) . ' </label><input name="post_password" id="' . $label . '" type="password" size="20" maxlength="20" /><input type="submit" name="Submit" value="' . esc_attr__( "Отправить" ) . '" />
    </form>
    ';
    return $o;
}
add_filter( 'the_password_form', 'my_password_form' );
?>

Проблема решена. (Для тех, кто уже реализовал пользовательский фильтр, который вызвал эту проблему, никакой проблемы быть не должно с информацией, предоставленной Wombat… так почему же вы, ребята, его недооцениваете??)

Столкнулся с тем же устаревшим кодом. Независимо от того, как вы изменяете защищённую паролем форму, wp-pass.php больше не существует. Ваше действие в форме должно быть, как предлагает Wombat:

<form action="<?php echo get_option('siteurl'); ?>/wp-login.php?action=postpass">

Используйте это действие формы, чтобы отправить переменную пост-пароль для проверки.

Замените wp-pass.php на /wp-login.php?action=postpass

.

Ответ или решение

Проблема с возникновением ошибки 404 после попытки доступа к защищённым паролем постам на платформе WordPress может быть довольно распространённой, особенно при использовании устаревшего или неправильно настроенного кода. Описание проблемы демонстрирует ключевую ошибку, связанную с конфигурацией формы паролей и неправильным указанием ресурсов, используемых для обработки этих форм. Разберем подробнее.

Теория

Ошибка 404 указывает на то, что запрашиваемый ресурс не найден на сервере. В контексте WordPress, это может указывать на проблемный путь к файлу или несуществующий файл в системе. До определённого момента WordPress использовал файл wp-pass.php для обработки введённых паролей к защищённым постам. Однако, в более современных версиях WordPress этот способ был заменён, и аналогичная функциональность теперь реализуется через wp-login.php?action=postpass.

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

Пример

Неправильный код, который вызывает ошибку 404, может выглядеть так:

<form action="<?php echo esc_url( site_url( 'wp-pass.php', 'login_post' ) ); ?>" method="post">
    <!-- Другие элементы формы -->
</form>

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

<form action="<?php echo esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ); ?>" method="post">
    <!-- Другие элементы формы -->
</form>

Этот код направляет запрос на существующий и поддерживаемый WordPress метод обработки ввода пароля, что позволяет избежать ошибки 404.

Применение

Чтобы решить проблему и гарантировать правильное поведение защищённых паролем постов на WordPress, следуйте следующим шагам:

  1. Обновление кода: Идентифицируйте все места в своей теме или плагинах, где используется старая форма для ввода паролей и замените wp-pass.php на wp-login.php?action=postpass. Это необходимо сделать везде, где проникается значение action для формы пользователя.

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

  3. Регулярное обновление: Важная часть любого процесса управления сайтами — это поддержание всего программного обеспечения в актуальном состоянии. Регулярные обновления тем и плагинов помогают не только улучшить функциональность сайта, но и минимизировать появление таких ошибок в будущем.

  4. Использование официальных ресурсов: Код и примеры решений всегда должны черпаться из проверенных источников, таких как Codex или другие официальные документы WordPress. Если вы находите код в интернете, внимательно проверяйте его актуальность и применимость к вашей версии WordPress.

Следуя этим шагам, вы не только устраните текущую проблему, но и создадите более устойчивую и надёжную платформу для вашего сайта. Это поможет укрепить как безопасность, так и функциональную целостность вашего сайта, предоставляя пользователям оптимальный опыт взаимодействия.

Оцените материал
Добавить комментарий

Капча загружается...