2013-07-06 4 views
0

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

Мысль что-то, как это будет работать:

Шаблон:

<form action="" method="POST"> 
     <input type="password" name="post_password" value=""/> 
     <input type="submit" name="submit" value="Submit"/> 
    </form> 
    <?php    
      $result = $wpdb->get_results("SELECT id FROM wp_posts WHERE post_password = '{$_POST['post_password']}'"); 
      if ($result) { 
       $location = $result[0]->id; 
       do_action('init', $location); 
      } else { 
       echo '<p>Invalid password</p>'; 
      } 

    ?> 

functions.php:

function process_post($arg0){  
    if (isset($arg0) { 
     wp_safe_redirect(get_bloginfo('url'). "/?page_id=" . $arg0); 
     exit(); 
    } 
} 
add_action('init', 'process_post', 10, 1); 

Но не работает. Подумал, что использование крючка init позволит избежать ошибки, связанной с сообщением заголовка, но я все еще получаю ее.

По-прежнему необходимо установить пароль для отправки в качестве значения cookie - есть ли функция WP для этого?

+0

Это не фактическая установка в вашем шаблоне права? Код php после формы без каких-либо действий? –

+0

@koala_dev, параметр действия не обязательно должен быть определен. Если оставить пустым, форма отправляется на текущий адрес. – Nadh

+0

@NADH вы правы, мне жаль, что я не думал прямо, я должен сейчас лечь спать ... –

ответ

0

Буферизация вывода сделала все возможное, добавив это действие, а также установив cookie почтового паролей перед перенаправлением. Целевая страница затем заверяется в проверку post_password_required и перенаправляет обратно на родительскую страницу, если пароль не установлен. Все сладкое, именно то, что я пытался достичь (кроме него не работает, если вы вошли в Wordpress и попытаетесь получить доступ к защищенному сообщению, что для моего контекста не имеет значения).

functions.php:

function process_post($arg0, $arg1){ 
    if ($arg0 != "") { 
     setcookie('wp-postpass_' . COOKIEHASH, wp_hash_password($arg1), time() + 60, COOKIEPATH); 
     wp_safe_redirect(get_bloginfo('url'). "/gallery/" . $arg0); 
     exit; 
    } 
} 
add_action('init', 'process_post', 10, 2); 

function app_output_buffer() { 
    ob_start(); 
} 
add_action('init', 'app_output_buffer'); 

Шаблон:

<form action="" method="POST"> 
     <input type="password" name="post_password" value=""/> 
     <input type="submit" name="submit" value="Submit"/> 
    </form> 
    <?php    
     if (isset($_POST['post_password'])) { 
      $result = $wpdb->get_results("SELECT post_name FROM wp_posts WHERE post_password = '{$_POST['post_password']}'"); 
      if ($result) { 
       $location = $result[0]->post_name; 
       do_action('init', $location, $_POST['post_password']); 
      } else { 
       echo '<p>Invalid password</p>'; 
      } 
     }    
    ?> 
Смежные вопросы