diff --git a/functions.php b/functions.php
index 8f379f4a..25a2adeb 100644
--- a/functions.php
+++ b/functions.php
@@ -48,6 +48,17 @@ if ( ! defined( 'FICTIONEER_LOGOUT_ENDPOINT' ) ) {
define( 'FICTIONEER_LOGOUT_ENDPOINT', 'fictioneer-logout' );
}
+/**
+ * Adds route to OAuth 2.0 script
+ *
+ * @since 4.0.0
+ */
+
+function fictioneer_add_oauth2_endpoint() {
+ add_rewrite_endpoint( FICTIONEER_OAUTH_ENDPOINT, EP_ROOT );
+}
+add_action( 'init', 'fictioneer_add_oauth2_endpoint', 10 );
+
/*
* Strings
*/
@@ -469,10 +480,18 @@ if ( get_option( 'fictioneer_enable_epubs' ) ) {
}
/**
- * Log-in and register subscribers via OAuth 2.0.
+ * Log-in and register via OAuth 2.0.
*/
-require_once __DIR__ . '/includes/functions/_module-oauth.php';
+add_action(
+ 'template_redirect',
+ function () {
+ if ( ! is_null( get_query_var( FICTIONEER_OAUTH_ENDPOINT, null ) ) ) {
+ require_once __DIR__ . '/includes/functions/_module-oauth.php';
+ }
+ },
+ 1
+);
/**
* Handle comments.
diff --git a/includes/functions/_helpers-templates.php b/includes/functions/_helpers-templates.php
index 408e2c2c..101d7712 100644
--- a/includes/functions/_helpers-templates.php
+++ b/includes/functions/_helpers-templates.php
@@ -2088,3 +2088,122 @@ function fictioneer_page_background( $context = null ) {
}
}
add_action( 'fictioneer_main', 'fictioneer_page_background' );
+
+// =============================================================================
+// GET LOGIN LINKS
+// =============================================================================
+
+/**
+ * Returns an OAuth 2.0 login link for the given channel
+ *
+ * @since 4.7.0
+ * @since 5.19.0 - Refactored.
+ *
+ * @param string $channel The channel.
+ * @param string $content Content of the link.
+ * @param array $args {
+ * Array of optional arguments.
+ *
+ * @type string $return_url Optional. Return URL. Defaults to home address.
+ * @type string $classes Optional. Additional CSS classes for the link.
+ * @type int $post_id Optional. Current post ID.
+ * @type string $action Optional. The action to perform. Defaults to 'login'.
+ * @type bool $merge Optional. Whether this is a merge request.
+ * @type string $anchor Optional. Anchor for the return URL.
+ * }
+ *
+ * @return string OAuth 2.0 login link or empty string if disabled.
+ */
+
+function fictioneer_get_oauth2_login_link( $channel, $content, $args = [] ) {
+ // Return empty string if...
+ if (
+ ! get_option( 'fictioneer_enable_oauth' ) ||
+ ! get_option( "fictioneer_{$channel}_client_id" ) ||
+ ! get_option( "fictioneer_{$channel}_client_secret" )
+ ) {
+ return '';
+ }
+
+ // Setup
+ $return_url = isset( $args['return_url'] ) ? $args['return_url'] : get_permalink( $args['post_id'] ?? 0 );
+ $classes = $args['classes'] ?? '';
+
+ // Build URL
+ $url = add_query_arg(
+ array(
+ 'action' => $args['action'] ?? 'login',
+ 'return_url' => $return_url,
+ 'channel' => $channel
+ ),
+ wp_nonce_url( get_site_url( null, FICTIONEER_OAUTH_ENDPOINT ), 'authenticate', 'oauth_nonce' )
+ );
+
+ if ( $args['merge'] ?? 0 ) {
+ $url = add_query_arg( 'merge', $args['merge'], $url );
+ }
+
+ if ( $args['anchor'] ?? 0 ) {
+ $url = add_query_arg( 'anchor', $args['anchor'], $url );
+ }
+
+ $url = esc_url( $url );
+
+ // Return HTML link
+ return "{$content}";
+}
+
+/**
+ * Returns OAuth 2.0 login links for all channels
+ *
+ * @since 4.7.0
+ * @since 5.19.0 - Refactored.
+ *
+ * @param boolean|string $label Optional. Whether to show the channel as
+ * label and the text before that (if any).
+ * Can be false, true, or any string.
+ * @param string $classes Optional. Additional CSS classes.
+ * @param boolean|string $anchor Optional. Anchor to append to the URL.
+ *
+ * @return string Sequence of links or empty string if OAuth 2.0 is disabled.
+ */
+
+function fictioneer_get_oauth2_login_links( $label = false, $classes = '', $anchor = false, $post_id = null ) {
+ // Abort if...
+ if ( ! get_option( 'fictioneer_enable_oauth' ) ) {
+ return '';
+ }
+
+ // Setup
+ $channels = array(
+ ['discord', __( 'Discord', 'fictioneer' )],
+ ['twitch', __( 'Twitch', 'fictioneer' )],
+ ['google', __( 'Google', 'fictioneer' )],
+ ['patreon', __( 'Patreon', 'fictioneer' )],
+ // ['subscribestar', __( 'SubscribeStar', 'fictioneer' )]
+ );
+ $output = '';
+
+ // Build link for each channel
+ foreach ( $channels as $channel ) {
+ // Prefix (if any)
+ $prefix = is_string( $label ) ? "{$label} " : '';
+
+ // Label after the icon (if any)
+ $oauth_label = $label ? "{$prefix}{$channel[1]}" : '';
+
+ // Build link
+ $output .= fictioneer_get_oauth2_login_link(
+ $channel[0],
+ '' . $oauth_label,
+ array(
+ 'classes' => $classes,
+ 'anchor' => $anchor ?: '',
+ 'post_id' => $post_id
+ )
+ );
+ }
+
+ // Return link sequence as HTML
+ return $output;
+}
diff --git a/includes/functions/_module-oauth.php b/includes/functions/_module-oauth.php
index b91215ba..3232362f 100644
--- a/includes/functions/_module-oauth.php
+++ b/includes/functions/_module-oauth.php
@@ -45,140 +45,6 @@ define(
)
);
-// =============================================================================
-// SETUP
-// =============================================================================
-
-/**
- * Add route to OAuth 2.0 script
- *
- * @since 4.0.0
- */
-
-function fictioneer_add_oauth2_endpoint() {
- add_rewrite_endpoint( FICTIONEER_OAUTH_ENDPOINT, EP_ROOT );
-}
-add_action( 'init', 'fictioneer_add_oauth2_endpoint', 10 );
-
-// =============================================================================
-// GET LOGIN LINKS
-// =============================================================================
-
-/**
- * Returns an OAuth 2.0 login link for the given channel
- *
- * @since 4.7.0
- * @since 5.19.0 - Refactored.
- *
- * @param string $channel The channel.
- * @param string $content Content of the link.
- * @param array $args {
- * Array of optional arguments.
- *
- * @type string $return_url Optional. Return URL. Defaults to home address.
- * @type string $classes Optional. Additional CSS classes for the link.
- * @type int $post_id Optional. Current post ID.
- * @type string $action Optional. The action to perform. Defaults to 'login'.
- * @type bool $merge Optional. Whether this is a merge request.
- * @type string $anchor Optional. Anchor for the return URL.
- * }
- *
- * @return string OAuth 2.0 login link or empty string if disabled.
- */
-
-function fictioneer_get_oauth2_login_link( $channel, $content, $args = [] ) {
- // Return empty string if...
- if (
- ! get_option( 'fictioneer_enable_oauth' ) ||
- ! get_option( "fictioneer_{$channel}_client_id" ) ||
- ! get_option( "fictioneer_{$channel}_client_secret" )
- ) {
- return '';
- }
-
- // Setup
- $return_url = isset( $args['return_url'] ) ? $args['return_url'] : get_permalink( $args['post_id'] ?? 0 );
- $classes = $args['classes'] ?? '';
-
- // Build URL
- $url = add_query_arg(
- array(
- 'action' => $args['action'] ?? 'login',
- 'return_url' => $return_url,
- 'channel' => $channel
- ),
- wp_nonce_url( get_site_url( null, FICTIONEER_OAUTH_ENDPOINT ), 'authenticate', 'oauth_nonce' )
- );
-
- if ( $args['merge'] ?? 0 ) {
- $url = add_query_arg( 'merge', $args['merge'], $url );
- }
-
- if ( $args['anchor'] ?? 0 ) {
- $url = add_query_arg( 'anchor', $args['anchor'], $url );
- }
-
- $url = esc_url( $url );
-
- // Return HTML link
- return "{$content}";
-}
-
-/**
- * Returns OAuth 2.0 login links for all channels
- *
- * @since 4.7.0
- * @since 5.19.0 - Refactored.
- *
- * @param boolean|string $label Optional. Whether to show the channel as
- * label and the text before that (if any).
- * Can be false, true, or any string.
- * @param string $classes Optional. Additional CSS classes.
- * @param boolean|string $anchor Optional. Anchor to append to the URL.
- *
- * @return string Sequence of links or empty string if OAuth 2.0 is disabled.
- */
-
-function fictioneer_get_oauth2_login_links( $label = false, $classes = '', $anchor = false, $post_id = null ) {
- // Abort if...
- if ( ! get_option( 'fictioneer_enable_oauth' ) ) {
- return '';
- }
-
- // Setup
- $channels = array(
- ['discord', __( 'Discord', 'fictioneer' )],
- ['twitch', __( 'Twitch', 'fictioneer' )],
- ['google', __( 'Google', 'fictioneer' )],
- ['patreon', __( 'Patreon', 'fictioneer' )],
- // ['subscribestar', __( 'SubscribeStar', 'fictioneer' )]
- );
- $output = '';
-
- // Build link for each channel
- foreach ( $channels as $channel ) {
- // Prefix (if any)
- $prefix = is_string( $label ) ? "{$label} " : '';
-
- // Label after the icon (if any)
- $oauth_label = $label ? "{$prefix}{$channel[1]}" : '';
-
- // Build link
- $output .= fictioneer_get_oauth2_login_link(
- $channel[0],
- '' . $oauth_label,
- array(
- 'classes' => $classes,
- 'anchor' => $anchor ?: '',
- 'post_id' => $post_id
- )
- );
- }
-
- // Return link sequence as HTML
- return $output;
-}
-
// =============================================================================
// PROCESS
// =============================================================================