サポート » 使い方全般 » ショートコードを使ってphpでデータベースのデータを表示させる方法

  • 解決済 bebetroma

    (@bebetroma)


    phpでデータベースのデータを取得してwordpressのサイトに表示させたりすることを勉強しているのですが、
    エラーの原因がわかりません。

    `<html>
    <head></head>
    <body>
    <?php
    // これでWordPress関数がほとんど使えるようになる!
    include ‘wp-load.php’;
    // wp_optionsテーブルから3件を取得
    $results = $wpdb->get_results(“SELECT * FROM wp_options LIMIT 3”);
    // 結果を表示
    var_dump($results);
    ?>
    </body>
    </html>`

    上記のphpファイルをルートドキュメントのwordpressフォルダの中に保存して実行すると、
    ちゃんと表示されるのですが、wordpressのfunctions.phpファイルに

    function db_yomikomi(){
     // これでWordPress関数がほとんど使えるようになる!
    include 'wp-load.php';
     // wp_optionsテーブルから10件を取得
    $results = $wpdb->get_results("SELECT * FROM wp_options LIMIT 3");
     // 結果を表示
    var_dump($results);
     }
     add_shortcode('yomikomi','db_yomikomi');

    と記述して、投稿欄に[yomikomi]と記述(ショートコード)すると、

    Fatal error: Call to a member function get_results() on null in

    というエラーが出ます。何がおかしいのでしょうか?

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    エラーとは関係ありませんが、ショートコードの関数内で wp-load.php をインクルードする必要はありません。

    エラーの原因ですが、get_results は、$wpdb のメンバー関数であるため $wpdb->get_results という記述になります。
    この $wpdb ですが、変数のグローバル領域で利用できるものであり、通常関数内などでは利用出来ません。
    これを利用するためには、関数内で変数のグローバル宣言を行う必要があります。

    global $wpdb;

    この記述以降、記述されている関数内で、指定された変数はグローバル領域の変数を参照するようになります。

    参考:PHP: 変数のスコープ – Manual

    トピック投稿者 bebetroma

    (@bebetroma)

    解答ありがとうございました。
    できました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「ショートコードを使ってphpでデータベースのデータを表示させる方法」には新たに返信することはできません。