[WordPress] シンプルブッキングプラグインの予約データをぶっこ抜く

WordPressで予約サイトを作るときはMTS Simple Bookingを利用させて頂いております。

非常によくできたプラグインだと思います。

スタートアップのサービスに使用するのに、ちょうど良い感じだと思います。

運用しているとカスタマイズがしたくなります。

モバイルだとカレンダー表示がきついので表示をかえたり、予約済みデータを期間指定で取得したい場合などなど。

以下はイベントデータを抽出し、サイトマップのデータを生成しています。

/**
* シンプルブッキングプラグインからイベントデータの抽出
*
* @return array $sitemap_data
* @author tuti
*/
function get_simple_booking_events()
{
global $wpdb;

// 期間指定
$month_first_day = '1496242800'; // 開始日:2017/06/01 00:00:00
$next_month_end_day = mktime(0, 0, 0, date('n') + 2, 1, date('Y')); // 翌月末

$query = "
SELECT (booking_time - booking_time % 86400) AS booking_daytime,article_id
FROM wp_mtssb_booking
WHERE booking_time>=$month_first_day
AND booking_time<$next_month_end_day
GROUP BY booking_daytime,article_id
ORDER BY booking_daytime,article_id
";
$rows = $wpdb->get_results($query);

// 除外するページID
$no_publish_aids = array(0);

$sitemap_data = '';
foreach($rows as $row)
{

$query ="
SELECT ID AS article_id,post_title AS name,post_type,post_status,post_modified
FROM wp_posts
WHERE ID=$row->article_id
AND post_type='mtssb_article'
AND post_status in ('publish')
";

$event = $wpdb->get_results($query);
//echo date("Y年m月d日", $row->booking_daytime);
//echo $event[0]->name;

// 除外adi
if ( in_array($event[0]->article_id, $no_publish_aids) )
{
continue;
}

$permalink = sprintf('http://xxxxx.com/schedule/?aid=%d&ymd=%d', $event[0]->article_id, $row->booking_daytime);
$postdate = explode(" ", $event[0]->post_modified);
$sitemap_data .= '<url>'."\n".
'<loc>'. _h($permalink) .'</loc>'."\n".
'<lastmod>'. $postdate[0] .'</lastmod>'."\n".
'<changefreq>monthly</changefreq>'."\n".
'</url>'."\n";
}

return $sitemap_data;
}

/**
* エスケープ処理
* XMLの値の中に&が入ってるとエラーで落ちるので
*
* @param string
* @return string
*/
function _h($value)
{
return htmlspecialchars($value, ENT_QUOTES);
}

クエリが重そうなのでキャッシュを使うことをオススメします 😆

シェアする

  • このエントリーをはてなブックマークに追加

フォローする