Intereting Posts
Получение комментариев для сообщений с использованием WP_Query () и пользовательского цикла? Как настроить дочернюю тему без использования @import Как создать пользовательские URL таксономии без названия таксономии? Как предотвратить атаку XSS в теме WordPress? Правильно Используя проверенную функцию WordPress Скрыть панель администратора определенного типа сообщений Результаты поиска в WordPress для нескольких типов сообщений Новые многоузловые перенаправления на главный сайт Фильтрация пользовательских типов сообщений по настраиваемому полю с помощью AJAX Показать все 12 месяцев, независимо от того, есть ли у них сообщения Добавление пользовательских метабокс в пользовательские страницы Как долго пользователи остаются в системе, если они НЕ проверяют, помните меня? Лучший подход, позволяющий просматривать внешний вид рецензентов сообщений? Как получить последнюю обновленную строку или идентификатор в wordpress Как сделать все сообщения в категории?

Создание типа пользовательской публикации видимо только для пользователей, не являющихся пользователями, по определенной ссылке

Я работаю над созданием небольшого веб-приложения с wordpress в качестве рамки. Он позволяет вам вводить клиента и, в свою очередь, отправляет электронное письмо клиенту со ссылкой на веб-сайт, чтобы завершить короткий опрос.

У меня есть пользовательский тип «Клиент», который включает вопросы опроса в качестве настраиваемых полей. Я блокирую содержимое и области администрирования и т. Д. С s2member, который до сих пор отлично работал.
Тем не менее, я после того, как я могу отобразить отдельную страницу, на которой есть форма опроса, и отображать ее только для тех, кто получает ссылку в электронном письме. Возможно, что-то с файлами cookie и htaccess?

Я пытался найти ответ в течение последних нескольких часов, но это немного над моей головой. Любая помощь, даже если толчок в правильном направлении будет очень признателен!

Я думаю, что вы хотите, это настраиваемое правило перезаписи – в частности, пользовательская конечная точка.

Это должно было жить вне s2member.

Чтобы начать, оберните все в класс:

<?php class WPSE71804 { // post type key, whatever this happens to be. const TYPE = 'customer'; // endpoint mask, 2 ^ 18 const EP = 262144; // key prefix, used for options const PREFIX = 'wpse71804_key_'; // container for the instance of this class private static $ins = null; public static function instance() { is_null(self::$ins) && self::$ins = new self; return self::$ins; } public static function init() { add_action('plugins_loaded', array(self::instance(), '_setup')); } // add actions and such. public function _setup() { // we'll add actions here later. } } 

Там есть некоторые константы, которые мы будем использовать позже.

Вам нужно будет изменить регистрацию типа записи, чтобы включить в аргумент rewrite специальную маску конечных точек.

 <?php class WPSE71804 { // snip snip // add actions and such. public function _setup() { add_action('init', array($this, 'register')); } // register the post type public function register() { // rewrite is the args to pay attention to we need // to set a custom endpoint mask register_post_type(self::TYPE, array( 'label' => __('Customers', 'wpse'), 'public' => true, 'rewrite' => array( 'slug' => 'customer', 'ep_mask' => self::EP, 'with_front' => false, ), )); } } 

Оттуда мы можем подключиться к init и вызвать add_rewrite_endpoint .

Это устанавливает переписывание, поэтому мы можем перейти на сайт yoursite.com/customers/the-post/key/some_key_here .

 <?php class WPSE71804 { // snip snip // add actions and such. public function _setup() { add_action('init', array($this, 'register')); add_action('init', array($this, 'endpoint'), 11); } // snip snip public function endpoint() { add_rewrite_endpoint('key', self::EP); } } 

Теперь это просто вопрос подключения к template_redirect и проверки ключа.

 <?php class WPSE71804 { // snip snip public static function init() { add_action('plugins_loaded', array(self::instance(), '_setup')); register_activation_hook(__FILE__, array(__CLASS__, 'activate')); } // add actions and such. public function _setup() { add_action('init', array($this, 'register')); add_action('init', array($this, 'endpoint'), 11); add_action('template_redirect', array($this, 'validate_key')); } // snip snip public function validate_key() { // not aa singular customer page? Or have an admin user? bail. if(!is_singular(self::TYPE) || current_user_can('manage_options')) return; if(!($_key = get_query_var('key')) || !($key = self::get_key($_key))) { global $wp_query; $wp_query->set_404(); } // if we're here, the key is okay, let the request go through } } 

Также может быть полезно создать хороший API для использования (этот бит кода использует один из этих методов).

 <?php class WPSE71804 { // snip snip /********** API **********/ // create a new key public static function create_key() { $k = wp_generate_password(24, false); self::update_key($k, 'notdone'); return $k; } // update a key public static function update_key($key, $val='done') { return update_option(self::PREFIX . $key, $val); } // delete a key public static function delete_key($key) { return delete_option(self::PREFIX . $key); } public static function get_key($key) { return get_option(self::PREFIX . $key); } } 

Теперь вы можете использовать вышеприведенное что-то вроде …

 <?php // create a key $k = WPSE71804::create_key(); // send mail with key here! // after they submit the survey, you might want to make a note of that. WPSE71804::update_key($k, 'done'); // or maybe just delete it and revoke access to the page WPSE71804::delete_key($k); 

Не уверен, насколько хорошо это будет играть вместе с s2member, но по существу это блокирует весь доступ к страницам без ключа на лицевой стороне. Возможно, вам не нужно ограничивать доступ с помощью s2member. Вот и все это как плагин .

Мое (простое) решение поставит все, что вам нужно, в

 if ( ! is_user_logged_in() ){ //stuff } 

и все в этом if будет показано только тем, кто не вошел в систему.

Сообщения могут содержать защищенные post_password столбцы post_password в таблице wp_posts. Или вы можете использовать http://wordpress.org/extend/plugins/post-password-plugin/ для создания уникальных токенов.