2012-09-12 11 views
1

저는 하루 종일 wordpress에서 setcookies를 찾는 방법을 찾고있었습니다. 내 방식으로 나는 (개발자 툴바를 사용하여) 쿠키가 설정되었지만 여전히 작동하지 않는다는 것을 발견했다. 나는 2 개의 파일을 가지고 있는데 첫 번째는 쿠키를 설정하고 다른 페이지로 돌아와 작동하는지 확인하기 위해 다른 페이지로 리디렉션되는 로그인 양식을 포함합니다. 테스트 대상 도메인은 blog.mydomain.com과 같습니다.은 wordpress에서 setcookie에 올바른 방법이 필요합니다.

<?php 
setcookie("user_name","test",time()+3600); 
?> 

및 chcking이 같은 쿠키 : 나는이 문제에 대해 많은 내용을 읽어했지만 명확한 대답이 없었다

if(isset($_COOKIE["user_name"])){ 
echo "cookie exists"; 
} 
else{ 
echo "cookie doesn't exist"; 
} 

여기 이기에, setcookie 파일입니다. 미리 감사드립니다.

답변

3

이것은 일반적으로 출력을 브라우저로 보낸 후 쿠키를 설정하려고 할 때 발생합니다. WP에서 쿠키를 설정하려면 'init'훅을 사용하여 init에서 쿠키를 설정해야합니다.

function set_username_cookie() { 
    if (!isset($_COOKIE['user_name'])) { 
     setcookie("user_name","test",time()+3600); 
    } 
} 
add_action('init', 'set_username_cookie'); 
1

또 다른 옵션은 사용하는 것입니다 PHP의 ob_start();ob_end_flush();.

<?php ob_start(); ?> 
<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
<body> 
    <?php /* Wordpress loop and other tempate code here */ ?> 
</body> 
</html> 
<?php ob_end_flush(); ?> 

나는 세계를 호출 한으로 실행 된 문제 :

You can find documentation on the two functions here

나는 내 문제를 해결하는 방법은 다음과 같이 개폐 html 태그 전후에이 함수를 호출하는 것이 었습니다 함수를 사용하여 PHP의 setcookie();을 사용하고 WordPress가 페이지를 점진적으로 처리하므로 페이지의 헤더가 이미 전송되어 있기 때문에 쿠키를 만들 수 없습니다.

PHP의 출력 버퍼링 기능은 WordPress에서 페이지를 처리하기 전에 헤더를 강제로 전송합니다.

희망이 도움이됩니다.

0

아니라, 워드 프레스에서 쿠키를 사용하는 나의 가장 좋은 방법은,

function set_my_cookie() { 
global $post; 
$post_id = $post->ID; 
$cookie_name = "my_cookie"; 
$cookie_value = "my_cookie_val"; 
if (!isset($_COOKIE['my_cookie'])) { 
{ 
    setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
}}add_action('wp', 'set_my_cookie'); 

내가 워드 프레스의 포스트 후크 이기에, setcookie이 기능을 사용합니다. 이것의 주된 이유는 언젠가는 현재의 페이지 나 포스트가 필요할지도 모른다는 것입니다. 우리는 init 훅에서 액세스 할 수 없지만 wp 훅으로 액세스 할 수 있습니다.

이제 짧은 코드 또는 다른 플러그인/테마 함수에서 쿠키가 있는지 여부 만 확인하면됩니다. thats

관련 문제