2016-07-25 6 views
0

私はメタフィールド 'priority_priority'を作成して、訪問回数に基づいて投稿を並べ替えることができます。したがって、訪問者が投稿を訪問するたびに優先度変数が減少します。しかし、同じユーザーからの最初の訪問時に優先度を下げたいので、Cookieを使用していますが、優先度を働かせない次のコードは常に減少します。クッキーがワードプレスで動作しない

は常にNULLに

$post_id = get_the_ID(); 
     $priority = get_post_meta($post_id,'priority_priority',true); 
     if($priority>1) 
     {  
      if(!isset($_COOKIE['visitor'.$post_id])) 
      {   
       $bool=setcookie('visitor'.$post_id,$post_id,DAY_IN_SECONDS,'/'); 
       if(count($_COOKIE) > 0) 
       { 
        $priority = $priority-1; 
        update_post_meta($post_id,'priority_priority',$priority); 
       } 
      } 

     } 
get_header(); 
?> 

<div id="primary" class="content-area"> 

    <main id="main" class="site-main site-main--single" role="main"> 
    <div> 
     test 
    <?php var_dump($_COOKIE['visitor'.$post_id]);?>  
    </div> 
    </main><!-- #main --> 

</div><!-- #primary --> 
+0

このチェックのポイントは何ですか?if(count($ _ COOKIE)> 0) '?スクリプトのその時点で、 'isset($ _ COOKIE ['visitor'。$ post_id])'が偽であることを既に知っています – BeetleJuice

+0

ええ、そこに置くことには何の意味もありません。私はそれを削除するのを忘れていました。私が推測する問題とは関係がありません。 –

+0

あなたの 'setcookie'行から' $ bool'の値は何ですか? – BeetleJuice

答えて

1
**Add this Function in functions.php** 

function set_user_cookie() { 
    $test = "fyjfhjf"; 
    setcookie('default_school', $test, time()+3600); 
} 
add_action('init', 'set_user_cookie'); 


**To display** 
echo $_COOKIE['default_school']; 
+0

はい、うまくいきますが、正確にinitが実行されたときにはどうなるのですか?$ post_idをset_user_cookie関数に渡す方法 –

+0

投稿IDを取得するにはこれらの2つの質問に最初に答えてください。 /stackoverflow.com/questions/25862495/how-to-get-current-post-id-in-function-php-file Second:http://wordpress.stackexchange.com/questions/140753/get-current-post- id-in-functions-php –

+0

ありがとう。私はそれを試してみましょう。 –

1

を与える私は理由のカップルのために、セッションではなく、クッキーは、この問題を解決するための優れたツールだと思います:

  • Cookieの値には、ヘッダがすでにブラウザに送信された場合は、コントラストセッションで

は、ユーザの活動のより信頼性の高いアカウントを保つ

  • setcookieが動作しませんブラウザで変更することは本当に簡単です。スクリプトの開始時に、セッションを開始します。

    <?php 
    if(session_status()===PHP_SESSION_NONE) session_start(); 
    

    セッションで必要な情報を保存または取得できます。

    if(!isset($_SESSION['visitor'.$post_id])){ 
        $_SESSION['visitor'.$post_id] = true; 
        $priority -= 1; 
        update_post_meta($post_id,'priority_priority',$priority); 
    } 
    

    はまたフィールドpostIDip、およびtime_addedで、このためにDBテーブルを使用することができます。要求が来たら、一致するpostIDipが見つからない場合は、それを追加します。見つかった場合は、time_addedが24時間より古いことを確認してください。その場合、優先度を減らすことができます。

  • +0

    私はそれを試してみます、ありがとう –

    +0

    @AkashGajbhiye私は私の答えの下に、現在のコードを修正する方法を追加しました。 – BeetleJuice

    +0

    ブラウザが終了してもセッションが終了しないようにするには、ユーザーがポストを訪問してから24時間が経過している必要があります。 –

    関連する問題