質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1645閲覧

【wordpress】カスタムフィールドに保存している閲覧数を多重カウントしてしまう

y_ina

総合スコア14

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/10/15 18:49

以下のようなset_post_views()関数を作成して呼び出したときにpv_countという名のカスタムフィールドに保存している閲覧数を出力して1足したものをアップデートする簡単なプログラムですが、必ず2足された数がカスタムフィールドに保存されてしまいます。

この関数を2回呼び出しているわけではなく、update_post_metaの前後でアラートにより$sum_countの数を確認するとやはり1ではなく2多くなった数字が表示されます。原因が分かる方は教えていただけないでしょうか?

ちなみに、プラグインをすべて無効にした状態でも同じ結果でした。

PHP

1function set_post_views() { 2 $postID = get_the_ID(); 3 $key = 'pv_count'; 4 $sum_count = get_post_meta( $postID, $key, true ); 5 6 //アクセス数を更新する 7 update_post_meta( $postID, $key, $sum_count + 1 ); 8 9 //試しにここで閲覧数を出力すると必ず1ではなく、2足された数が帰って来てしまう 10 $sum_count = get_post_meta( $postID, $key, true ); 11 echo "<script>alert('$sum_count');</script>"; 12} 13remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); 14

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tabuu

2018/10/15 23:24

「$sum_count = get_post_meta( $postID, $key, true );」この時点の$sum_countは確認されましたでしょうか?
y_ina

2018/10/16 01:27

はい、確認しました。MySQLのテーブルも見ながらやってみましたがやはり1アクセスで2アクセスとカウントされてしまいます。
tabuu

2018/10/16 01:42

ちょっと強引ですが「echo」の次の行に「die();」を入れたらPHPの処理が強制終了されるのですが、強制終了して問題ないのであれば、そのときのHTMLソース確認できますか?
y_ina

2018/10/16 02:15

die();を入れてしまうと後の処理が実行されないのでページ自体の表示が途中で止まってしまいます。echoの直後にdie();を入れた場合でもやはり2追加された数がアラートで表示されました...。
CHERRY

2018/10/16 02:32 編集

テスト環境の WordPress に 質問に書かれたコードを記載して、twentyseventeen の single.php の the_post() の直後に set_post_views() を追加して実際に動かしてみましたが、2回カウントアップするのは、再現しませんね。 お使いのテーマとかプラグインでリロードしているものとかないでしょうか? また、標準テーマに変更して、組み込んでも再現しますか? query ログも確認してみましたが、update は、+1 した数字で更新している1行だけのようです。 実際の環境で、可能であれば、query ログを確認してみてください。
y_ina

2018/10/16 03:04

ありがとうございます、確かにtwentyseventeenに実装してみたところ正常に動作しました。プラグインは入れていないのでテーマが原因だと思うのですがリロードしてしまうよくある原因がありましたら教えていただけますと幸いです。
CHERRY

2018/10/16 03:07

差し障りなければ、テーマ名は、何でしょうか?
CHERRY

2018/10/16 03:10 編集

また、テーマファイルで、どのように set_post_views() を呼び出しているのかわかりませんが、ファイルの2箇所にか書かれているとかないでしょうか? ( 記載されているのは、1箇所でも get_template_part で同じファイルを2回読みこまれていて、実質2回実行されるとか... )
tabuu

2018/10/16 04:48

1ページにechoの内容が2回出力されていないのであればset_post_views関数コール後にリダイレクトして再度コールしているのだと思われます。
tabuu

2018/10/16 04:52

もしくはAJAXでその関数をコールするPHPにアクセスされているか。
y_ina

2018/10/16 05:08

色々と試してみた所single.phpで無駄な関数を呼び出していてその影響で2重カウントされていました。解決しました、ありがとうございます!
CHERRY

2018/10/16 05:14

原因と修正内容の概要を回答欄に記載して、自己解決で質問を終了させていただけないでしょうか。
guest

回答2

0

色々と試してみた所single.phpで無駄な関数を呼び出していてその影響で2重カウントされていました。解決しました、ありがとうございます!

投稿2018/10/16 05:14

y_ina

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

色々と試してみた所single.phpで無駄な関数を呼び出していてその影響で2重カウントされていました。コメントをいただいた皆さんのおかげで解決しました、ありがとうございます!

投稿2018/10/16 05:13

y_ina

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問