私はwp-super-cacheを使用するWordpress主導のサイトを持っているため、インラインPHPではなくajaxによってビューを追跡する必要があります。以下は、ajaxを介して呼び出される私のPHPファイルの内臓です。コードは実際にはWordpress固有のものではありませんが、少し説明すると、wp_postmeta
テーブルを更新するのと同じように更新されますupdate_post_meta()
。mysqliを使用し、2つのSQLクエリを実行します
- 更新するpostidが有効であることを確認してください。
- ビューカウントを増やします。
私の質問は、このコードにいくつかのパフォーマンスの問題がありますか、それはどういうわけかより良いでしょうか?
コードの抜粋:
#...ajax stuff
$json_array = array();
$json_array["category_id"] = (int)$cat_id;
$json_array["post_id"] = (int)$post_id;
// get secure database credentials
require("/server/abspath/dbinfo.inc");
$db_details = new dbCreds;
$mysqli = new mysqli(
$db_details->get("dbhost"),
$db_details->get("dbuser"),
$db_details->get("dbpw"),
$db_details->get("db")
);
# test if valid post
# sql call no1
$valid_post_sql = "SELECT ABS(meta_value) FROM wp_postmeta "
. "WHERE (post_id = '" . $post_id . "' AND meta_key = 'views')";
$current_view_count = @$mysqli->query($valid_post_sql)->fetch_array();
$valid_post_sql_result = $current_view_count ? true : false;
if ( $valid_post_sql_result == false ) {
die("4");
}
# set new view-count
$views = isset($current_view_count[0]) && (int)$current_view_count[0] >= 0
? ((int)$current_view_count[0]+1) : 0;
# if not an admin or no views recorded yet
if ( !$is_admin || $views == 0 ) {
# sql call no2
$increment_imgviews_sql = "UPDATE wp_postmeta SET meta_value = "
. "meta_value + 1 WHERE (post_id = '" . $post_id
. "' AND meta_key = 'views')";
$mysqli->query($increment_imgviews_sql);
}
$json_array["views"] = $views;
return $json_array;
新しいコード:
これは私が最終的に使用したものであり、2つの呼び出しをこの1つの呼び出しに置き換えました。
UPDATE wp_postmeta SET meta_value = meta_value + 1 WHERE post_id = '" . $post_id . "' AND meta_key = 'views';
ノート!これにより、現在のビューカウントが返されないため、戻り応答が廃止されます。しかし一方で、私はクエリを保存します。