Name the destination page in the continue link
"Continue to your account" says nothing about where the link goes. Use the chosen page's own title instead — "Continue to Book a Lesson" — so the visitor knows before clicking. An untitled page keeps the generic wording rather than rendering "Continue to ".
This commit is contained in:
@@ -132,7 +132,7 @@ recorded in `us_policy_acceptances` with `registration_type = account` and
|
|||||||
The block's **After registration** panel picks the page a student continues to once
|
The block's **After registration** panel picks the page a student continues to once
|
||||||
registration finishes, and whether they get there by hand or automatically.
|
registration finishes, and whether they get there by hand or automatically.
|
||||||
|
|
||||||
- **Sign-in page** (`loginPageId` / `login_page_id`) — the target of the "Sign in to your account" link shown after email confirmation (`?us_confirmed=1|ready`, falling back to the WordPress login screen) and of the "Continue to your account" link every **logged-in** visitor gets (`RegistrationPage::continueLink()`): an invited student who just finished signing up (`?us_registered=invite`), and anyone who simply arrives at the registration page already signed in. Neither gets the WordPress-login-screen fallback — with no page chosen there is no link at all, since sending someone already signed in to the login screen is the same dead end with extra steps.
|
- **Sign-in page** (`loginPageId` / `login_page_id`) — the target of the "Sign in to your account" link shown after email confirmation (`?us_confirmed=1|ready`, falling back to the WordPress login screen) and of the **"Continue to _<page title>_"** link every **logged-in** visitor gets (`RegistrationPage::continueLink()`): an invited student who just finished signing up (`?us_registered=invite`), and anyone who simply arrives at the registration page already signed in. The link names the chosen page (via `get_the_title()`) so the visitor knows where it goes; an untitled page falls back to "Continue to your account" rather than reading "Continue to ". Neither gets the WordPress-login-screen fallback — with no page chosen there is no link at all, since sending someone already signed in to the login screen is the same dead end with extra steps.
|
||||||
- **Redirect automatically** (`autoRedirect`, block only) — sends the student to that page instead of showing the link, via `BlockRegistrar::maybeAutoRedirect()` on `template_redirect`. It fires only on those two finished states (`RegistrationPage::isRegistrationComplete()`), so the "check your email" step, a validation error, and an `expired` confirmation link are always shown rather than redirected past. With no page chosen nothing happens — there is deliberately no login-screen fallback for the redirect. See `editor-blocks.md`.
|
- **Redirect automatically** (`autoRedirect`, block only) — sends the student to that page instead of showing the link, via `BlockRegistrar::maybeAutoRedirect()` on `template_redirect`. It fires only on those two finished states (`RegistrationPage::isRegistrationComplete()`), so the "check your email" step, a validation error, and an `expired` confirmation link are always shown rather than redirected past. With no page chosen nothing happens — there is deliberately no login-screen fallback for the redirect. See `editor-blocks.md`.
|
||||||
|
|
||||||
## Token Redirect
|
## Token Redirect
|
||||||
|
|||||||
@@ -351,8 +351,10 @@ class RegistrationPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The "continue to your account" paragraph shown to a logged-in visitor, or
|
* The "continue" paragraph shown to a logged-in visitor, or an empty string
|
||||||
* an empty string when no destination page is configured.
|
* when no destination page is configured. The link names the chosen page, so
|
||||||
|
* the visitor knows where it goes before clicking; an untitled page falls
|
||||||
|
* back to generic wording rather than reading "Continue to ".
|
||||||
*
|
*
|
||||||
* The sign-in-page fallback {@see loginUrl()} applies is deliberately not
|
* The sign-in-page fallback {@see loginUrl()} applies is deliberately not
|
||||||
* used here: pointing someone who is already signed in at the login screen is
|
* used here: pointing someone who is already signed in at the login screen is
|
||||||
@@ -361,13 +363,25 @@ class RegistrationPage {
|
|||||||
* @param array<int|string, mixed> $atts
|
* @param array<int|string, mixed> $atts
|
||||||
*/
|
*/
|
||||||
private function continueLink( array $atts ): string {
|
private function continueLink( array $atts ): string {
|
||||||
$continue = $this->continueUrl( $this->successPageId( $atts ) );
|
$pageId = $this->successPageId( $atts );
|
||||||
|
$continue = $this->continueUrl( $pageId );
|
||||||
|
|
||||||
return null === $continue
|
if ( null === $continue ) {
|
||||||
? ''
|
return '';
|
||||||
: '<p><a href="' . esc_url( $continue ) . '">'
|
}
|
||||||
. esc_html__( 'Continue to your account', 'unsupervised-schedular' )
|
|
||||||
. '</a></p>';
|
$title = trim( Val::string( get_the_title( $pageId ) ) );
|
||||||
|
$label = '' === $title
|
||||||
|
? esc_html__( 'Continue to your account', 'unsupervised-schedular' )
|
||||||
|
: esc_html(
|
||||||
|
sprintf(
|
||||||
|
/* translators: %s: title of the page the student continues to. */
|
||||||
|
__( 'Continue to %s', 'unsupervised-schedular' ),
|
||||||
|
$title
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return '<p><a href="' . esc_url( $continue ) . '">' . $label . '</a></p>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -497,11 +497,28 @@ class RegistrationPageTest extends TestCase
|
|||||||
Functions\when('is_user_logged_in')->justReturn(true);
|
Functions\when('is_user_logged_in')->justReturn(true);
|
||||||
Functions\when('sanitize_key')->alias(static fn ($v) => strtolower((string) $v));
|
Functions\when('sanitize_key')->alias(static fn ($v) => strtolower((string) $v));
|
||||||
Functions\expect('get_permalink')->once()->with(4)->andReturn('http://home.test/welcome/');
|
Functions\expect('get_permalink')->once()->with(4)->andReturn('http://home.test/welcome/');
|
||||||
|
Functions\when('get_the_title')->justReturn('Book a Lesson');
|
||||||
|
|
||||||
$html = $this->ctx['page']->render([ 'loginPageId' => 4 ]);
|
$html = $this->ctx['page']->render([ 'loginPageId' => 4 ]);
|
||||||
|
|
||||||
self::assertStringContainsString('now logged in', $html);
|
self::assertStringContainsString('now logged in', $html);
|
||||||
self::assertStringContainsString('href="http://home.test/welcome/"', $html);
|
self::assertStringContainsString('href="http://home.test/welcome/"', $html);
|
||||||
|
// The link names its destination rather than saying "your account".
|
||||||
|
self::assertStringContainsString('Continue to Book a Lesson', $html);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testContinueLinkFallsBackToGenericWordingForAnUntitledPage(): void
|
||||||
|
{
|
||||||
|
Functions\when('is_user_logged_in')->justReturn(true);
|
||||||
|
Functions\when('sanitize_key')->alias(static fn ($v) => strtolower((string) $v));
|
||||||
|
Functions\when('get_permalink')->justReturn('http://home.test/welcome/');
|
||||||
|
Functions\when('get_the_title')->justReturn(' ');
|
||||||
|
|
||||||
|
// An untitled page must not produce a link reading "Continue to ".
|
||||||
|
$html = $this->ctx['page']->render([ 'loginPageId' => 4 ]);
|
||||||
|
|
||||||
|
self::assertStringContainsString('Continue to your account', $html);
|
||||||
|
self::assertStringContainsString('href="http://home.test/welcome/"', $html);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAlreadyLoggedInVisitorIsLinkedToTheChosenPage(): void
|
public function testAlreadyLoggedInVisitorIsLinkedToTheChosenPage(): void
|
||||||
@@ -511,11 +528,13 @@ class RegistrationPageTest extends TestCase
|
|||||||
Functions\when('is_user_logged_in')->justReturn(true);
|
Functions\when('is_user_logged_in')->justReturn(true);
|
||||||
Functions\when('sanitize_key')->alias(static fn ($v) => strtolower((string) $v));
|
Functions\when('sanitize_key')->alias(static fn ($v) => strtolower((string) $v));
|
||||||
Functions\expect('get_permalink')->once()->with(4)->andReturn('http://home.test/welcome/');
|
Functions\expect('get_permalink')->once()->with(4)->andReturn('http://home.test/welcome/');
|
||||||
|
Functions\when('get_the_title')->justReturn('Book a Lesson');
|
||||||
|
|
||||||
$html = $this->ctx['page']->render([ 'loginPageId' => 4 ]);
|
$html = $this->ctx['page']->render([ 'loginPageId' => 4 ]);
|
||||||
|
|
||||||
self::assertStringContainsString('already have an account', $html);
|
self::assertStringContainsString('already have an account', $html);
|
||||||
self::assertStringContainsString('href="http://home.test/welcome/"', $html);
|
self::assertStringContainsString('href="http://home.test/welcome/"', $html);
|
||||||
|
self::assertStringContainsString('Continue to Book a Lesson', $html);
|
||||||
// Not the just-registered message — that branch needs its own flag.
|
// Not the just-registered message — that branch needs its own flag.
|
||||||
self::assertStringNotContainsString('us-success', $html);
|
self::assertStringNotContainsString('us-success', $html);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user