2013-07-06 5 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); 

을하지만 작동하지 않습니다. 초기화 후크를 사용하면 헤더 정보 전송 오류를 피할 수 있다고 생각하지만 여전히 사용 중입니다.

실제로 제출 된 비밀번호를 쿠키 값으로 설정해야합니다. WP 기능이 있습니까?

+0

? 액션이 정의되지 않은 폼의 PHP 코드가 정의 되었습니까? –

+0

@koala_dev, 액션 매개 변수를 정의 할 필요가 없습니다. 비어 있으면 폼이 현재 URL로 전송됩니다. – Nadh

+0

@NADH 맞아, 미안해. 나는 곧장 생각하지 못했다. 지금 자러 가야한다. ... –

답변

0

출력 버퍼링이 모든 차이점을 만들었습니다. 해당 동작을 추가하고 리디렉션 전에 포스트 비밀번호 쿠키를 설정하십시오. 대상 페이지는 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>'; 
      } 
     }    
    ?> 
관련 문제