WordPress自作プラグインからショートコードを呼びだす

自作プラグイン完成間近でショートコードを呼びだす関数

開発とかサイトの話題が続くときはたいていはマジメに仕事やっているということで(汗)WordPressの話題が続きます。

ショートコードのPHPスクリプトはプラグインのファイルからプラグインを有効化してあれば自動で読み込むようなので便利。

プラグインの管理画面でMySQLテーブルにデータを保存したら記事ページにショートコードを貼り付けてデータを表示させることができる。

データ本体はその都度自動で各APIから取得するんだけど、キーワードとかAPIのほうのカテゴリーとかを選択してそれらをMySQLテーブルに保存しておけば、最適な情報をページに表示してくれる。

簡単に言えば「キーワード」を保存(管理画面の役目)して、それを使って各APIから情報を取得して、ページ内にデータを表示(ショートコードの役目)させる。

ショートコードと管理画面の関数をまとめてプラグインファイルに書く

とりあえずプラグインはひとまず完成したみたい。

<?php
/*
Plugin Name: kakaku-tyousa
Plugin URI:
Description:
Version: 0.2
Author: GO
Author URI: https://bey.jp
License:
*/

//----------ショートコードの関数------------------

function kakakutyousadisp($atts) {
    include_kakakutyousa();//定数・各種ファイルを読み込む
    ob_start();
    pageget($atts['pagename']);
    echo apiget();                    //各APIから情報取得して表示
    return ob_get_clean();
}
add_shortcode("kakaku_shortcode", "kakakutyousadisp");

//----------管理画面のCSS,JS----------------------
function kakakuStyle(){//スタイルシート
    wp_enqueue_style('kakakuStyle', plugins_url('style.css', __FILE__));
    wp_enqueue_script( 'kakakujs', plugins_url('js.php', __FILE__));
}
add_action('admin_head','kakakuStyle');//admin_headで管理画面のCSSを追加

//----------管理画面の関数------------------------
function kakakutyousa() {
  add_options_page('価格調査のプラグイン', '価格調査', 8, __FILE__, 'kakakutyousa_admin');
}
add_action('admin_menu', 'kakakutyousa');
function kakakutyousa_admin() {
    include_kakakutyousa();//定数・各種ファイルを読み込む
    pageget();                         //DB読み込み 作成済のデータ
    apiget();                            //各APIから情報取得
    errorck('edit');                   //エラーチェック
    pageupdb();                      //ページ更新・作成
    echo htmldisp();                //表示
}

//----------各種設定 共通関数---------------------
function include_kakakutyousa(){//管理画面・ショートコードで最初に読み込む。
    define("KEYWDTABLE", 'wp_keywd');//価格調査を保存しておくMySQLテーブル
    define("CALIFETIME", 60000);//キャッシュファイルLIFETIME
    define("TABLEHYOUZI", 50);//価格テーブルにいくつ表示させるか
    require(PEARDIR.'/Cache/Lite/Output.php');
    require_once dirname(__FILE__)."/fanction.php";
    require_once dirname(__FILE__)."/html.php";
    require_once dirname(__FILE__)."/db.php";
}

?>

単純に管理画面のフック、ショートコードのフック、共通で使う関数、CSS,JSのフックに分けただけ。

もっと洗礼されたやり方あるか分からないけどとりあえず動くからこれでいいか。

CSS・JSのフックの部分を「kakakutyousa_admin」関数の中に入れたけど、入れたら機能しなくなった。原因不明

今回のプラグインで使った機能

 メモ的に使った機能を書いておきます。

  • キャッシュシステム:PEAR::Cache_Lite
    APIに接続する度にいちいちデータを取りに行かないで一定時間ローカルに保存しておく。
    ただ、キャッシュを効かせるとエラーになる場合がある。エラーメッセージなんだっけ?原因調査中
  • 複数APIを同時に叩く:curl_multi_init
    楽天API,AmazonAPI,YahooAPIなどを1個1個データを取得していくと日が暮れるので
    非同期で同時にアクセスして同時に取得する。
  • SimpleXMLElementクラス:各APIのデータを読む

かなり簡単にプラグインできました!もっと作りたくなってきた♪

欲がでてきて、自作プラグインの設定リンクを左メニューの「設定」の中じゃなく「投稿」の上あたりに持ってきたくなってきた。

All in One SEOとかJetpackがそうなのでできそう。やってみます。