feat(forum): guest cash purchase for topic and plate follow

- Reuse pay_no_logged_in / pay_cookie_day; generalized guest cookie helpers
- Topic + plate cash: guest preview/purchase (no balance), order.user_id=0, cookie unlock
- View gates: can_view_topic pay + plate follow accept signed guest cookies
- Templates: guest buy/follow CTAs; poll endpoint allows plate_follow guest orders
This commit is contained in:
kate522 committed 2026-07-15 13:58:54 +08:00
1 parent a9150862ef
commit 6b6314b033
9 files changed
+274 -70

No files matched your search

+9 -5
View File
@@ -159,9 +159,13 @@ class AKSRT_Content_Pay {
$order = $repo->get_user_order($uid, $order_number);
} else {
$order = $repo->get($order_number);
// Guest may only poll own guest content orders (user_id=0 + resource).
if ($order && ((int) ($order['user_id'] ?? -1) !== 0
|| (string) ($order['product_type'] ?? '') !== AKSRT_Domain_Model::ORDER_PRODUCT_RESOURCE)) {
// Guest may only poll own guest cash orders (user_id=0): content/topic resource or plate_follow.
$ptype = sanitize_key((string) ($order['product_type'] ?? ''));
$guest_types = [
AKSRT_Domain_Model::ORDER_PRODUCT_RESOURCE,
AKSRT_Domain_Model::ORDER_PRODUCT_PLATE_FOLLOW,
];
if ($order && ((int) ($order['user_id'] ?? -1) !== 0 || !in_array($ptype, $guest_types, true))) {
$order = null;
}
}
@@ -170,9 +174,9 @@ class AKSRT_Content_Pay {
}
$status = (string) ($order['status'] ?? '');
$paid = class_exists('AKSRT_Domain_Model') && AKSRT_Domain_Model::is_paid_order_status($status);
if ($paid && $uid <= 0 && function_exists('aksrt_set_guest_content_pay_cookies')) {
if ($paid && $uid <= 0 && function_exists('aksrt_set_guest_pay_cookies')) {
// Ensure cookie set even if notify raced ahead of browser cookie.
aksrt_set_guest_content_pay_cookies($order);
aksrt_set_guest_pay_cookies($order);
}
return new WP_REST_Response([
'order_number' => $order_number,