/** * 催促メールプレビュー(管理者確認用) * メール本文とhosted_invoice_urlを含むHTMLを返す */ function amet_get_reminder_mail_preview_callback() { $wp_check = amet_subscription_check_wp_environment(); if (!$wp_check['valid']) { wp_send_json_error(['message' => $wp_check['message']]); return; } if (!current_user_can('manage_options')) { wp_send_json_error(['message' => '権限がありません']); return; } $student_id = isset($_POST['student_id']) ? intval($_POST['student_id']) : 0; if (!$student_id) { wp_send_json_error(['message' => '生徒IDが不正です']); return; } try { global $wpdb; $student = $wpdb->get_row($wpdb->prepare( "SELECT * FROM {$wpdb->prefix}amet_students WHERE student_id = %d", $student_id )); if (!$student) { wp_send_json_error(['message' => '生徒が見つかりません']); return; } // StripeサブスクリプションID取得 if (!function_exists('amet_get_subscription_id')) { require_once dirname(__FILE__) . '/stripe-functions.php'; } $subscription_id = function_exists('amet_get_subscription_id') ? amet_get_subscription_id($student_id) : false; $hosted_invoice_url = ''; if ($subscription_id) { // Stripeライブラリ初期化 if (!class_exists('\Stripe\Stripe')) { $stripe_loaded = amet_subscription_load_stripe_safely(); } if (class_exists('\Stripe\Stripe')) { try { $stripe_mode = get_option('amet_stripe_mode', 'test'); $api_key = ($stripe_mode === 'live') ? get_option('amet_stripe_live_secret_key', '') : get_option('amet_stripe_test_secret_key', ''); \Stripe\Stripe::setApiKey($api_key); $invoices = \Stripe\Invoice::all(['subscription' => $subscription_id, 'limit' => 10]); if ($invoices && isset($invoices->data)) { foreach ($invoices->data as $inv) { if ($inv->status === 'open' || $inv->status === 'past_due') { if (!empty($inv->hosted_invoice_url)) { $hosted_invoice_url = $inv->hosted_invoice_url; break; } } } } } catch (Exception $e) { error_log('Stripe hosted_invoice_url取得失敗: ' . $e->getMessage()); } } } $subject = '【アメット英語スクール】お支払いのお願い'; $body = " {$student->name_kanji} 様 いつもアメット英語スクールをご利用いただき、ありがとうございます。 月謝のお支払いが確認できておりません。 恐れ入りますが、お支払い手続きをお願いいたします。 "; if ($hosted_invoice_url) { $body .= "\nお支払いはこちらからお願いいたします:\n{$hosted_invoice_url}\n"; } $body .= "\nご不明な点がございましたら、お気軽にお問い合わせください。\n\nアメット英語スクール\n "; // プレビュー用HTML生成 $html = '
'; $html .= '

送信予定メール内容:

'; $html .= '
件名: ' . esc_html($subject) . '
'; $html .= '
本文:
' . esc_html($body) . '
'; $html .= '
'; wp_send_json_success(['html' => $html]); } catch (Exception $e) { error_log('Reminder mail preview error: ' . $e->getMessage()); wp_send_json_error(['message' => 'エラーが発生しました: ' . $e->getMessage()]); } } if (function_exists('add_action')) { add_action('wp_ajax_amet_get_reminder_mail_preview', 'amet_get_reminder_mail_preview_callback'); } AmetEnglishSchool https://validator.w3.org/feed/docs/rss2.html 新システムの欠席振替の使い方 第6回アバターコンテスト結果発表~! セミナー内容 レッスン風景撮影していただきました! 大人レッスンの予約方法 コンセントからの異文化理解 BBカード 英語を話せると、どんどん積極的になる! 日本の英語教育を変えたい! 大人も子供も英語が話せるようになるコツ 学校の授業だけでいいと思っていませんか? しめ縄販売開始~! みんなのすごいボード記録💓 形容詞ゲーム 2024年10月 初オータムキャンプ!! 大人講座オフ会 船ってどんなとこ? 大人レッスン 2022年12月 ラズキッズアバターコンテスト中間発表!! 二人三脚の英語スクールが最強! 英語嫌いになってしまった子どもでも英語好きになる 安心安全アイシャドウづくり タイレッスン 【高校生~大人】個性を生かして輝く ミココース 特定商取引法に基づく表記 登録完了 予約制コース申込 チケットのご購入ありがとうございます サブスクリプション完了 アメットイングリッシュスクールマイページ 2023. Aug 第9回ラズキッズコンテスト! プライバシーポリシー LINEタイムラインシェアで2ポイント! 入会フォーム Jazz Chants導入しました リップグロス体験!初開催 初めて訪問していただいた方へ こんなご家庭に最適! 2025年以降の体験について 動画講座 入り方 保護中: 【2回目の体験レッスン、ありがとうございました】 保護中: 【本日は体験レッスンお越しいただきありがとうございました】 正しく自分を主張すること レッスンカレンダー Razkidsのダウンロード方法と、使い方 Dekita できたアプリの使い方 【中学生~高校生】自由な表現力を リベータスコース 【小学生週2回】飛躍する週2回 リープコース 【小学生】新しい世界との調和 ハーモニアコース