/* === 歌舞伎町ホテル案内ショートコード [kabukicho_hotels] === */
add_action(‘init’, function () {
add_shortcode(‘kabukicho_hotels’, function ($atts) {
// コンテナだけ返す(JSで描画)
ob_start(); ?>
歌舞伎町 ホテル案内
★ = 女の子の人気度(元画像準拠)/ 公式サイトURLは適宜差し替えください。
post_content) || strpos($post->post_content, ‘[kabukicho_hotels]’) === false) return;
// データ(公式URLは # を後で置換)
$hotels = [
[“name”=>”Hotel Bless(ブレス)”,”stars”=>”★★★”,”url”=>”#”,”tel”=>”03-5291-6262″,”address”=>”新宿区歌舞伎町2-2-12″,”minPrice”=>2500,”prices”=>[
“休憩(平日) ¥2500均一 (2時間) ※ラグジュアリールーム除く ¥3800〜¥4500 (3時間)”,
“休憩(土日祝) ¥2500均一 (2時間) ※ラグジュアリールーム除く ¥4300〜¥4800 (3時間)”
]],
[“name”=>”Hotel 8(エイト)”,”stars”=>”★(古め)”,”url”=>”#”,”tel”=>”03-3208-8008″,”address”=>”新宿区歌舞伎町2-2-8″,”minPrice”=>3000,”prices”=>[
“休憩(平日) ¥4300 (4時間)”,”休憩(土日祝) ¥5400 (4時間)”
]],
[“name”=>”Hotel W-ARAMIS(ダブルアラミス)”,”stars”=>”★★★★★”,”url”=>”#”,”tel”=>”03-5291-1955″,”address”=>”新宿区歌舞伎町2-7-4″,”minPrice”=>4000,”prices”=>[“休憩 ¥4000〜”]],
[“name”=>”Hotel Dwave(ディーウェーブ)”,”stars”=>”★★★★★”,”url”=>”#”,”tel”=>”03-3200-4681″,”address”=>”新宿区歌舞伎町2-8-6″,”minPrice”=>4000,”prices”=>[“休憩 ¥4000〜”]],
[“name”=>”Hotel XO 新宿店(エックスオー)”,”stars”=>”★★★”,”url”=>”#”,”tel”=>”03-3200-5115″,”address”=>”新宿区歌舞伎町2-6-6″,”minPrice”=>3500,”prices”=>[“ショート(全日) ¥3500〜¥3800″,”休憩(全日) ¥5300〜¥5800”]],
[“name”=>”Hotel ミント”,”stars”=>”★★”,”url”=>”#”,”tel”=>”03-3200-1148″,”address”=>”新宿区歌舞伎町2-6-8″,”minPrice”=>2800,”prices”=>[“ショート(平日 6:00〜24:00) ¥2800 (100分)”,”ショート(土日祝 6:00〜24:00) ¥3800 (100分)”]],
[“name”=>”Hotel バリアンリゾート 新宿本店”,”stars”=>”★★★★★”,”url”=>”#”,”tel”=>”0120-759-417″,”address”=>”新宿区歌舞伎町2-1-11″,”minPrice”=>6300,”prices”=>[“¥6300〜¥13800”]],
[“name”=>”Hotel プティバリ 東新宿店”,”stars”=>”★★★★”,”url”=>”#”,”tel”=>”0120-691-581″,”address”=>”新宿区歌舞伎町2-5-1″,”minPrice”=>4800,”prices”=>[“¥4800〜¥12300”]],
[“name”=>”Hotel GRANDCHARIOT(グランシャリオ)”,”stars”=>”★★★★★”,”url”=>”#”,”tel”=>”03-3208-0005″,”address”=>”新宿区歌舞伎町2-6-1″,”minPrice”=>5000,”prices”=>[“日〜木・祝日(6:00〜18:00) ¥5000均一”,”金・土・祝前(6:00〜16:00) ¥5000均一”]],
[“name”=>”Hotel SENSE(センス)”,”stars”=>”★★★★★”,”url”=>”#”,”tel”=>”03-3200-0303″,”address”=>”新宿区歌舞伎町2-6-3″,”minPrice”=>4000,”prices”=>[“日〜木・祝日(6:00〜18:00) ¥4000〜¥5500″,”金・土・祝前(6:00〜16:00) ¥4000〜¥5500”]],
[“name”=>”Hotel 妃-an-(アン)”,”stars”=>”★★★★”,”url”=>”#”,”tel”=>”03-3207-5111″,”address”=>”新宿区歌舞伎町2-7-5″,”minPrice”=>5900,”prices”=>[“6:00〜翌3:00 ¥5900〜¥8600”]],
[“name”=>”Hotel PROUD(プラウド)”,”stars”=>”★★★”,”url”=>”#”,”tel”=>”03-3209-8731″,”address”=>”新宿区歌舞伎町2-7-6″,”minPrice”=>5300,”prices”=>[“休憩(全日) 24時間制 ¥5300〜¥7300 (2時間)”]],
[“name”=>”Hotel Perrier(ペリエ)”,”stars”=>”★★★★”,”url”=>”#”,”tel”=>”03-3207-5921″,”address”=>”新宿区歌舞伎町2-7-10″,”minPrice”=>5900,”prices”=>[“休憩(6:00〜翌3:00) ¥5900〜¥8500”]],
[“name”=>”Hotel エクセレント”,”stars”=>”★★”,”url”=>”#”,”tel”=>”03-3200-6501″,”address”=>”新宿区歌舞伎町2-7-10″,”minPrice”=>3900,”prices”=>[“休憩3時間(5:00〜翌2:00) (平日) ¥4100〜¥6080 / (休日) ¥4100〜¥7520″,”2時間(5:00〜翌2:00) (全日) ¥3900均一”]],
[“name”=>”Hotel FORSION(フォーション)”,”stars”=>”★★★★”,”url”=>”#”,”tel”=>”03-3202-2591″,”address”=>”新宿区歌舞伎町2-9-7″,”minPrice”=>6300,”prices”=>[“休憩(6:00〜翌4:00) ¥6300〜¥10000”]],
[“name”=>”Hotel PASHA(パシャ)”,”stars”=>”★★★★★★★”,”url”=>”#”,”tel”=>”03-3207-2031″,”address”=>”新宿区歌舞伎町2-10-12″,”minPrice”=>7300,”prices”=>[“休憩(全日 6:00〜翌3:00) ¥7300〜¥17200”]]
];
// スタイル
wp_register_style(‘kh-style’, false);
wp_enqueue_style(‘kh-style’);
wp_add_inline_style(‘kh-style’, ‘
:root{–bg:#f5fbff;–card:#fff;–ink:#0b1220;–muted:#5b6472;–radius:18px}
#kabukicho-hotels{background:var(–bg);border:1px solid #e7eef5;border-radius:var(–radius);padding:16px}
#kabukicho-hotels .kh-header{margin-bottom:8px}
#kabukicho-hotels h2{margin:0 0 6px;font-size:clamp(20px,2.6vw,28px)}
#kabukicho-hotels .kh-note{color:var(–muted);font-size:14px;margin:0 0 8px}
#kabukicho-hotels .kh-tools{display:flex;gap:10px;flex-wrap:wrap}
#kabukicho-hotels input[type=search], #kabukicho-hotels select{
border:1px solid #d7e4ee;padding:10px 12px;border-radius:12px;background:#fff;font-size:14px}
#kabukicho-hotels .kh-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin-top:12px}
#kabukicho-hotels .kh-card{background:var(–card);border:1px solid #e7eef5;border-radius:var(–radius);padding:14px;box-shadow:0 4px 18px rgba(0,0,0,.04)}
.kh-title{display:flex;align-items:center;gap:8px;margin:0 0 4px}
.kh-title a{color:var(–ink);text-decoration:none}
.kh-stars{color:#ff7a23;letter-spacing:2px;font-size:14px}
.kh-meta{margin:6px 0;color:var(–muted);font-size:14px;line-height:1.6;white-space:pre-line}
.kh-price{font-weight:600;margin:6px 0}
.kh-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.kh-btn{appearance:none;border:none;border-radius:12px;padding:8px 10px;font-size:14px;cursor:pointer;background:#eef6ff;color:#0b3d91;text-decoration:none;display:inline-flex;align-items:center}
.kh-btn.primary{background:#ffeadb;color:#7a2f00}
.kh-btn:hover{filter:brightness(.96)}
‘);
// スクリプト(データを渡す)
wp_register_script(‘kh-app’, false, [], null, true);
wp_enqueue_script(‘kh-app’);
wp_add_inline_script(‘kh-app’, ‘window.KH_HOTELS = ‘ . wp_json_encode($hotels, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES) . ‘;’);
wp_add_inline_script(‘kh-app’, ‘
(function(){
const hotels = window.KH_HOTELS || [];
const $list = document.getElementById(“kh-list”);
const $q = document.getElementById(“kh-q”);
const $pf = document.getElementById(“kh-price”);
const toMap = a => “https://www.google.com/maps?q=”+encodeURIComponent(a);
const toTel = t => “tel:”+t.replace(/[^0-9+]/g,””);
function card(h){
return `
${h.name}
${h.stars||””}
${h.minPrice ? `
` : “”}
`;
}
function render(list){ $list.innerHTML = list.map(card).join(“”); }
function apply(){
const term = ($q.value||””).trim();
const pf = $pf.value;
const filtered = hotels.filter(h=>{
const hay = (h.name+” “+h.address+” “+h.tel+” “+(h.prices||[]).join(” “));
const byText = !term || hay.includes(term);
let byPrice = true, p=Number(h.minPrice||0);
if(pf===”~3000”) byPrice = p<=3000;
else if(pf==="3000-5000") byPrice = p>=3000 && p<=5000;
else if(pf===">5000″) byPrice = p>5000;
return byText && byPrice;
});
render(filtered);
}
render(hotels);
$q && $q.addEventListener(“input”, apply);
$pf && $pf.addEventListener(“change”, apply);
})();
‘);
});