ワードプレス側からウィキペディアデータへクエリを送りデータを取得して表示させる

前回に引き続き今回はワードプレスでデータテーブルに保存したウィキペディアデータを抽出する方法について解説していきます。

クエリ発行、取得は概ねPHPで行いますので、ワードプレス投稿欄に入力するPHPがプログラムとして解釈されるよう、PHP Execution等のプラグイン導入が必要になります。

先ずはワードプレスとウィキペディアデータとの連携が取れているか確認するために、ワードプレスの投稿欄からウィキペディアデータテーブルへクエリを投げかけてみます。

下記のコードを投稿欄に貼り付けたページを新規作成してください。


<label for="search-form">キーワード検索</label>
<form class="" id="" role="search" action="" method="get">
<input class="" id="search-form" type="text" name="keyword" placeholder="" value="" /><input id="search-button" class="searchsubmit" type="submit" value="検索" />
</form>

<?php

// キーワード代入
$QueryKey = isset($_GET['keyword']) ? $_GET['keyword'] : "";

// 空のまま送信した場合はメッセージ
$message = ( isset($_GET['keyword']) && (!$QueryKey) ) ? "キーワードを入力してください。" : "";

// フォームデータの無害化
$dikey = sanitize_text_field($QueryKey);

// データベース グローバル変数
global $wpdb;

// デバッグ用
$wpdb->show_errors();

if ( $dikey ) {
  // キーワードに半角、全角スペースが含まれていたら「_」に変換(複合キーワード対策)
	$dikey = preg_replace("/( | )/", "_", $dikey );
	
	// クエリ発行 SQLインジェクション対策
	$dict_sql = $wpdb->prepare( "SELECT page_title, old_text FROM $wpdb->dict WHERE page_title LIKE %s", 
	$dikey.'%' );
	
	// 結果を配列で受け取る
	$dict_rows = $wpdb->get_results($dict_sql);
	
	// 結果があればデータ代入	
	if($dict_rows){
		$text = $dict_rows[0]->old_text;
		echo $text;
	}
}

?>
<p>
<?php echo $message; ?>
</p>
↓下の画像はキーワード入力欄に「007 サンダーボール作戦」と入力した際の結果状況です。

処理内容としましては、単純にウィキペディアデータの入ったテーブルのpage_titleカラムにキーワード検索をかけ、ヒットしたら同一レコード上のold_textカラムから文章を抽出して表示させるといった内容になります。

とうぜん、検索結果数によってはページャーで遷移させる必要も出てくるかもしれませんが、とりあえず、これらの作業により、ワードプレスにおいてのウィキペディアデータの取得は可能となります。

Wiki記法に関してはワードプレス側の受け皿を利用して反映させる方向でいくか、それともPHPの処理で取り除いたうえで出力させるかになると思いますが、この辺りの処理方法については次回、「PHPの処理でWiki記法を取り除く」で、詳しく解説したいと思います。

クエリのレスポンスによってはメモリサイズが足りずエラー「Fatal error: Allowed memory size of・・・」を誘発する場合がありますので、予めメモリの設定値を引き上げておく必要があるかもしれません。

メモリの設定値を引き上げる方法はいくつかあり、php.iniでメモリの値を変更するのが手っ取り早いのですが、レンタルサーバーの場合、変更できなかったり、あるいは大きく変更できない場合があります。

そんなときは下記の方法を試してください。

メモリの値はレンタルサーバーの環境を踏まえて設定する必要があります。

define('WP_MEMORY_LIMIT', '256M');

メモリサイズをwp-config.phpで設定する場合は上の記述追加します。

php_value memory_limit 256M

htaccessで設定する場合は上の記述を追加します。