【WordPress】グラフを表示する方法 -つまづきポイントを解説します-

PHP

WordPress でグラフを表示するには Chartjs を使用します。以下の記事を参考にすることができます。

WordPressとChart.jsで解析チャート管理画面を実装する方法を徹底解説(サンプルコード付き)
みなさんこんにちは!エンジニアの高澤です! 今回はWordPressとChart.jsで解析チャート管理画面を実装する方法を徹底解説していきたいと思います。 Chart.jsはJSON形式のデータを簡

この記事を参考にしましたが、なぜかグラフが表示されませんでした。開発者ツールで原因を調べたところ、Chart が Undefine であるというエラーが表示されていました。それは、私がある記述を見落としていたことが原因でした。

その記述とは jQuery(document).ready(function($){}); です。この中に グラフのスクリプト を記述をしないとエラーになり、グラフが表示されません。

それは chartjs をブラウザが読み込むタイミングが関係しています。chartjs より先に グラフのスクリプト がブラウザに読み込まれた場合、Chartクラスが定義されていないため、Uncaught ReferenceError: Chart is not defined というエラーが出てグラフが表示できません。

今回は chartjs を使用して、WordPress の記事の中にグラフを表示する方法をご紹介していきます。この方法を使って以下の記事を作成しましたので、よろしければ是非ご覧ください。

サンプルコード

まず初めにサンプルコードを記載します。このコードを functions.php に記載して更新します。functions.php はこちらの記事で解説しています。

実行結果

ショートコードを本文に記載し、ページを表示すると以下の画像のようになります。

コードの解説

チャートを表示するにはデータベースから取得したデータを表示したいという場合が多いと思います。そこで今回はデータベースから取得したデータをグラフに表示する方法をご紹介していきます。

WordPressのデータベースを使用する

データベースを使用するには wp-includes\class-wpdb.php の $tables変数に使用するテーブル名を記述する必要があます。以下の記事を参考に設定しましょう。ショートコードの使い方(※重要) も解説しています。

データを取り出す方法

テーブルへのアクセスと取り出し

$wpdb->target_youtuber の部分を見ると -> が使用されています。これによりデータベースのテーブルにアクセスすることができます。また、テーブル名には wp_ を付けません。

・項目データの取り出し

各項目を取り出す場合も -> を使用します。通常の配列のように $row[“title”] と記述しても取り出すことはできず、エラーとなるので注意しましょう。

chartjs を使用する

chartjs を wordpress で使用しているのは以下の部分です。

wp_enqueue_script() は WordPress が提供している関数で、スクリプトファイルを「重複しないように」また「適切な順番」で読み込むように制御してくれます。

wp_enqueue_script関数

wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );

$handleスクリプトの識別名
$srcスクリプトのパス
$deps依存スクリプト
$verスクリプトのバージョン
$in_footerスクリプトの読み込み位置(trueで/body前、falseで/head前)

ここで重要なのは $src です。ここに chartjs の URL を記述します。これにより、インターネット経由で chart.js が読み込まれます。

重要ポイント

chartjs へデータを設定する

ポイント①  jQuery(document).ready(function() { ここに処理を記載 });

chartjs の処理が記載されていますが、必ず jQuery(document).ready(function() { ここに処理を記載 }); としてください。この記載をすることにより、chartjs が呼び込まれた後に ここに処理を記載 の部分をブラウザが読み込みます。

この記述をしない場合、まだ chartjs を読み込んでいない場合でも ここに処理を記載 の部分がブラウザに読み込まれてしまう可能性があり、そうなるとエラーがでてグラフが読み込まれません。

ポイント② canvasタグの ID を合わせる

<canvas id=’myChart‘> と getElementById(‘myChart‘) は一致している必要があります。

ポイント③ 配列データを json_encode(配列変数) で chartjs に渡す

テーブルから取得した1次元配列のデータを json 形式に変換して chartjs に渡しています。配列を json 形式 に変換するには json_encode で囲むだけです。

ポイント④ option の設定方法

chartjs の最新バージョンの書き方は上のようにします。複数のデータがある場合は、’y-axis-1’、’y-axis-2’というようにしていきます。また grid:{ display: false } の部分は左右でそれぞれ罫線があると見ずらいため、片方の罫線を消しています。

グラフが表示されない場合

グラフが表示されない場合、以下の2点を実行してみましょう。

①Ctrl + F5 でスーパーリロードする

Ctrl + F5 はスーパーリロードと呼ばれ、ブラウザのキャッシュをクリアして再表示します。画像の表示のような場合にはキャッシュが残ったりしますが、今回のような場合ではキャッシュが残ることは考えにくいと思いますが、一応試してみましょう。

②F12 の開発者ツール(Chrome)の Console を見る

こちらは必ず実行しましょう。Chrome の場合は 右クリック → 検証 で見ることもできます。私が今回ハマったポイントとして、Uncaught ReferenceError: Chart is not defined が Console に表示されていたことから、chartjs の読み込みタイミングが問題だと気付きました。

さいごに

今回は chartjs を使用して WordPress の記事にグラフを表示する方法をご紹介しました。

参考になれば幸いです。

ではまた。

コメント