Обход пароля защищенной страницы или записи WordPress через URL
У меня есть защищенная паролем страница, к которой я хочу предоставить доступ через специальную ссылку с паролем в GET-параметре URL www.domaine.tld/my-page?code=mycustompassword
Я нашел это решение, но оно не работает Обход защиты паролем записей через GET-переменную
Пожалуйста, помогите мне обойти форму ввода пароля
Спасибо

add_filter( 'post_password_required', function( $returned, $post )
{
if( $returned && ( $_GET['pwd'] == $post->post_password ) )
$returned = false;
return $returned;
}, 10, 2 );
**Обходная ссылка для страницы, защищенной паролем. Необходимо добавить в файл функций темы. Ссылка должна выглядеть так: https://www.example.com/post/?pwd=ПАРОЛЬ

Вы можете использовать тот же принцип, что и в рабочем примере, однако замените $_GET
на $_POST
. В итоге у вас получится что-то вроде этого в конце кода:
// Ваша пользовательская проверка содержимого '$_POST'
// …также проверяем, есть ли вообще пароль
// …и если пользователь уже посещал страницу, не устанавливаем Cookie снова
if (
isset( $_POST['circumvent'] )
and 'disable-pass' === $_POST['circumvent']
and isset( $post->post_password )
and ! isset( 'wp-postpass_'.COOKIEHASH )
) {
// В итоге мы используем пароль в открытом виде, чтобы установить Cookie
// как если бы пользователь ввел его в форму пароля
setcookie(
'wp-postpass_'.COOKIEHASH,
$hasher->HashPassword( wp_unslash( esc_attr( $post->post_password ) ) ),
$expire,
COOKIEPATH
);
}
// Теперь выводим содержимое:
the_content();

Привет, спасибо за ответ. Я получаю такую ошибку: PHP Fatal error: Call to a member function HashPassword() on a non-object in /home/test-user/public_html/wp-content/themes/default/template-landing-private.php on line 81

Возможно, вам нужно добавить global $hasher;
в начале файла. Иначе, можете опубликовать весь файл целиком?

/ Название шаблона: TEST /
if ( isset( $GET['code'] ) and 'mycustompassword' === $_GET['code'] and isset( $post->post_password ) and null !== 'wp-postpass'.COOKIEHASH //!isset( 'wp-postpass_'.COOKIEHASH ) ) { setcookie( 'wp-postpass_'.COOKIEHASH, $hasher->HashPassword( wp_unslash( esc_attr( $post->post_password ) ) ), $expire, COOKIEPATH ); }
get_header(); while ( have_posts() ) : the_post(); the_content(); endwhile; get_footer();

Пожалуйста, размещайте ваш код между обратными кавычками (`), чтобы он был правильно отформатирован.

вместо использования the_content(), используйте echo apply_filters( 'the_content', $post->post_content ); возможно, я ошибаюсь, но считаю, что это позволит обойти форму с паролем полностью, после чего вы сможете реализовать собственную простую логику для отображения контента или его скрытия. Однако в любом случае настоятельно не рекомендую так делать, если контент содержит очень важные данные. например, надеюсь, это не персональная информация пользователей. дополнительно вам нужно убедиться, что у записи установлен пароль, чтобы она не отображалась в результатах поиска, картах сайта, лентах или конечных точках wp json api.
