サポート » テーマ » get_post_metaで得た値はエスケープすべきでしょうか?

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • nobita

    (@nobita)

    こんにちは、

    
    <?php // アクセス数の記録(ログインしているユーザーは除外)
      if (!is_user_logged_in() ) {
        $count_key = 'postviews';
        $count = get_post_meta($post->ID, $count_key, true);
        $count++;
        update_post_meta($post->ID, $count_key, $count);
      }
    ?>
    

    で、カウントしているとのことですが

    
    $count = get_post_meta($post->ID, $count_key, true);
    

    の$countは、初めてのアクセスの場合、から文字列 (文字型)ではありませんか?

    空文字に、$count++ しても、計算はできるようですが、、、結果も多分文字型になりますよね。
    まずは、そのあたりから考えてみてはどうでしょう。

    get_post_meta()には、フィルターもあるので、ゴミが入ったりする可能性もありますので、エスケープするに越したことはないのではないかと思います。

    ところで、サイトをチラッと見ると、キャッシュプラグイン使っているようですが、キャッシュで表示した場合は、カウンターが正常に動作しなさそうな感じがしますが、うまく動いていますか?

    • この返信は1 週前に  nobita さんが編集しました。

    @nobita さん
    アドバイスありがとうございます。
    いただいたコメントにつきまして下記3点のご回答を申し上げます。

    1.

    空文字に、$count++ しても、計算はできるようですが、、、結果も多分文字型になりますよね。
    まずは、そのあたりから考えてみてはどうでしょう。

    // $count = get_post_meta($post->ID, $count_key, true);
    (int)$count = get_post_meta($post->ID, $count_key);

    $countを必ず整数値になるようにキャストして、get_post_meta関数の第三引数をデフォルトの状態にしました(GitHubのコード)。

    2.

    get_post_meta()には、フィルターもあるので、ゴミが入ったりする可能性もありますので、エスケープするに越したことはないのではないかと思います。

    // echo $value . 'PV';
    echo intval($value) . 'PV';

    WordPress Codexに整数値の無害化に関する記述がありましたので、それに従ってPHPのintval関数を使用しました(GitHubのコード)。

    3.
    >カウンターが正常に動作しなさそうな感じがしますが、うまく動いていますか?

    ページにアクセスしても必ずしもカウントされていなかったので、
    一度、AutoptimizeとWP Super Cacheの設定を停止しました。

    ただ2つのプラグインについて「停止・有効化」を繰り返していると、WordPressの管理画面で
    WP Super Cacheに関する警告文が表示されるようになりました。

    その結果が原因かどうか分かりませんが、
    現在のsidebar.phpに表示されている人気記事は、
    なぜかトップ5にカウントされないようなアクセス数の少ない記事が表示されています。

    ちなみに今はAutoptimizeとWP Super Cacheともに有効化させています。

    以上、ご確認よろしくお願い申し上げます。

    現在のsidebar.phpに表示されている人気記事は、
    なぜかトップ5にカウントされないようなアクセス数の少ない記事が表示されています。

    ちなみに今はAutoptimizeとWP Super Cacheともに有効化させています。

    私見ですが、アクセスカウンター、集計結果ともにサーバサイドの処理ですよね、アクセスにキャッシュファイルが使用されたら、カウンターの処理は更新されませんよね

    なぜかトップ5にカウントされないようなアクセス数の少ない記事が表示されています。

    ということではないかと思います。

    カスタムフィールドの値をページに表示して、ログアウト時にアクセスして、正常に動作しているか確認してください。

    たぶん、キャッシュプラグインを使用するなら、javascriptなんかで処理する必要があると思います。

    • この返信は5 日、 18 時間前に  nobita さんが編集しました。

    @nobita さん。
    たびたびのコメントありがとうございます。

    カスタムフィールドの値をページに表示して、ログアウト時にアクセスして、正常に動作しているか確認してください。

    sidebar.phpの104行目と105行目でカスタムフィールドの値をページを表示し、
    ログアウト後にアクセスして見ても正常にカウントされている感じはありませんでした。

    また一連の操作を繰り返しているうちに管理画面の投稿記事の下に設置していたカスタムフィールド値が消えてしまったり、「有効化・停止」を繰り返しているWP Super Cacheの設定画面が警告文・注意文が発せられてしまい、
    当初の質問とかけ離れた状態になってきました(現在、WP Super Cacheは停止させています)。

    なので今回の質問につきましては、一旦終了とさせていただきます。
    sidebar.phpにアクセスの多い5つの記事を順番にならべかえる作業については別途検討します。
    今後ともどうぞよろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • このトピックに返信するにはログインが必要です。