get_post_metaで得た値はエスケープすべきでしょうか?
-
いつもお世話になっています。
下記の質問についてご存知の方がいらっしゃいましたらご教示を願います。—
【質問の主旨】
$value = get_post_meta( get_the_ID(), 'postviews', true ); if( $value ){ echo $value . 'PV'; }
上記のget_post_meta関数で得た$value変数をechoで出力するときは、エスケープが必要でしょうか?
【質問の補足】
1.
$value変数は個人ブログのsidebar.phpにある、「登美丘高校ダンス部の人気記事」の箇所で使っているPV数を表示するために使っています。2.
今回の質問に関するsidebar.phpのコードはGitHubで公開しています。3.
PV数はカスタムフィールドから取得しています。PV数のカウント方法はsingle.phpの156行目から163行目で記述しています。—
以上、よろしくお願い申し上げます。
ヘルプの必要なページ: [リンクを見るにはログイン]
-
こんにちは、
<?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()には、フィルターもあるので、ゴミが入ったりする可能性もありますので、エスケープするに越したことはないのではないかと思います。
ところで、サイトをチラッと見ると、キャッシュプラグイン使っているようですが、キャッシュで表示した場合は、カウンターが正常に動作しなさそうな感じがしますが、うまく動いていますか?
- この返信は6年、 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なんかで処理する必要があると思います。
- この返信は6年、 1ヶ月前にnobitaが編集しました。
@nobita さん。
たびたびのコメントありがとうございます。カスタムフィールドの値をページに表示して、ログアウト時にアクセスして、正常に動作しているか確認してください。
sidebar.phpの104行目と105行目でカスタムフィールドの値をページを表示し、
ログアウト後にアクセスして見ても正常にカウントされている感じはありませんでした。また一連の操作を繰り返しているうちに管理画面の投稿記事の下に設置していたカスタムフィールド値が消えてしまったり、「有効化・停止」を繰り返しているWP Super Cacheの設定画面が警告文・注意文が発せられてしまい、
当初の質問とかけ離れた状態になってきました(現在、WP Super Cacheは停止させています)。なので今回の質問につきましては、一旦終了とさせていただきます。
sidebar.phpにアクセスの多い5つの記事を順番にならべかえる作業については別途検討します。
今後ともどうぞよろしくお願いします。
- トピック「get_post_metaで得た値はエスケープすべきでしょうか?」には新たに返信することはできません。