Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

fix: send payment_received receipt after manual payment confirmation and email verification

オープン
#2,055 コメント 12 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@superdav42 がすでに取り組んでいます。

2026年10月28日 から。

  • #2064 @superdav42 による — オープン

評価

この issue はまだ評価されていません。

説明

bug origin:interactive status:in-review tier:standard

Goal

Send the payment_received system email (customer receipt and admin notice) in two cases that currently send nothing:

  1. A network admin confirms a pending manual payment.
  2. A free signup becomes active after its customer verifies their email address.

Evidence

Release 2.18.0 smoke test on a fresh dev network at origin/main c8b5ffe8 (2026-10-28), with mail captured by Mailpit:

  • Manual payment: Premium checkout with the Manual gateway left payment #1 and membership #1 pending, as expected. An admin then set the payment to Completed with "Activate membership?" on. The membership became active and the site was published, and "Your site is ready!" was sent. No payment_received email went to the customer or the admin. Event log rows for this step were changed payment and changed membership only.
  • Free signup with email verification: the thank-you page says "a receipt for your purchase has been emailed to you". After the customer followed the verification link, the site went READY and "Your site is ready!" was sent. No "Your free membership is active" / payment_received email was sent.
  • Both paths are unchanged since v2.17.2, so this is long-standing, not a regression.

How

  • payment_received fires only from Payment_Manager::handle_payment_success() (inc/managers/class-payment-manager.php:109-219), which listens to wu_gateway_payment_processed.
  • wu_gateway_payment_processed comes from Base_Gateway::trigger_payment_processed() (inc/gateways/class-base-gateway.php:901). The checkout calls it for free/trial orders only when email verification is not pending (inc/checkout/class-checkout.php:1074 and :1108). Gateways call it on gateway-confirmed payments.
  • Manual confirmation path: Payment_Edit_Admin_Page::handle_save() (inc/admin-pages/class-payment-edit-admin-page.php:1458+) activates the membership but never triggers payment processed.
  • Verification path: Customer_Manager::maybe_verify_email_address() / transition_customer_email_verification() (inc/managers/class-customer-manager.php:183, :245) publish the deferred free signup but never trigger payment processed.
  • Trigger it once in each path, with the payment's gateway (wu_get_gateway($payment->get_gateway())) or the manual/free gateway. Guard against duplicate events, for example by checking whether a payment_received event already exists for the payment, so a repeated save or verification can't send twice.
Files Scope
  • inc/admin-pages/class-payment-edit-admin-page.php
  • inc/managers/class-customer-manager.php
  • inc/managers/class-payment-manager.php
  • tests/WP_Ultimo/Managers/Payment_Manager_Test.php
  • tests/WP_Ultimo/Managers/Customer_Manager_Test.php

Verification

  • vendor/bin/phpunit --filter 'Payment_Manager_Test|Customer_Manager_Test'
  • vendor/bin/phpcs on the changed files.
  • Dev site with Mailpit: (1) a manual Premium checkout, then admin Completed + "Activate membership?", sends exactly one customer receipt and one admin notice; (2) a free signup with verification sends "Your free membership is active" once, after verification; (3) re-saving the completed payment sends nothing further.

aidevops.sh v3.39.49 plugin for OpenCode

主要言語
PHP
スター
218
フォーク
87
平均マージ
1日 2時間
マージ済み PR(30日)
109

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

Ultimate-Multisite/ultimate-multisite のほかの issue

Ultimate-Multisite/ultimate-multisite の issue をすべて見る

似ている issue

PHP の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。