Intereting Posts

Базовая защита паролем без использования пользователей и ролей

Я использую WooCommerce и хочу иметь возможность защищать паролем продукты (или, желательно, целые категории, если это возможно), но без использования функциональности Users & Roles в WP (потому что мне нужны анонимные гости, чтобы иметь возможность вводить пароль тоже) ,

Я пробовал стандартную сборку защиты паролей после записи в WP, но все, что делает это, блокирует описание продукта (например, тело «post»), но это не мешает вам видеть изображение продукта, подробности , и т. д. (и на самом деле вы все равно можете приобрести продукт тоже).

Я уже начал писать что-то сам (в основном я включил пользовательский атрибут на любую страницу, которую я хотел защитить, а затем настроил PHP-код шаблона страницы, чтобы потребовать пароль перед отображением страницы, но мои попытки (пока) 100% работают, потому что они завинчиваются с процессом тележки / проверки (я думаю, что это прерывает опубликованные данные формы или что-то в этом роде).

Есть идеи?

Спасибо Дэйву

Solutions Collecting From Web of "Базовая защита паролем без использования пользователей и ролей"

Вы можете попробовать подключиться к template_include и показать пользователю совершенно другую страницу, содержащую форму входа (без изменения URL-адреса), если почта защищена паролем. Объедините функцию WordPress, встроенную в почтовый пароль, и у вас есть что-то действительно близкое к тому, что вы хотите (блокирование всей страницы).

Вы также можете использовать {{вставить любой метод, который вы предпочитаете}}, чтобы проверить, нуждается ли сообщение в защите паролем. Пользовательские поля, блокировать целую категорию и т. Д.

Вот простой пример использования фильтра template_include .

 <?php add_filter('template_include', 'wpse77865_hijack_template'); /** * Hooked into `template_redirect`. Checks to see if we're on a singular page * and if it's password protected show the user a completely different page. * * @param string $tmp The template * @uses locate_template * @return string */ function wpse77865_hijack_template($tmp) { if ( is_singular() && post_password_required(get_queried_object()) && ($pw = locate_template('password.php')) ) { // if we're here, we are on a singular page // need a password and locate_template actually found // password.php in our child or parent theme. $tmp = $pw; } return $tmp; } 

Вышеупомянутое заменит шаблон single.php на сообщениях, для которых требуется пароль (например, пользователь еще не ввел его) с файлом шаблона с именем password.php в теме и / или дочерней теме. Этот шаблон может выглядеть примерно так (разорвано с двенадцати двенадцати).

 <?php /** * Post password form template. * * @package WordPress */ get_header('password'); ?> <div id="primary"> <div id="content" role="main"> <?php while (have_posts()): the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <header class="entry-header"> <h1 class="entry-title"><?php _e('Password Required', 'wpse'); ?></h1> </header><!-- .entry-header --> <div class="entry-content"> <?php echo get_the_password_form(); ?> </div><!-- .entry-content --> </footer><!-- .entry-meta --> </article><!-- #post --> <?php endwhile; // end of the loop. ?> </div><!-- #content --> </div><!-- #primary --> <?php get_footer('password'); ?> 

Как вы можете видеть, никакого намека на контент, просто форму пароля. После того, как пользователь войдет в почтовый пароль, он увидит обычную страницу. Не уверен, что это будет бесполезно с покупкой корзины или покупкой, но я уверен, что этого не произойдет.

Вот бит template_include как плагин .