Shortcodes: only register when needed (#526)

This commit is contained in:
Matt Wiebe 2023-10-19 14:46:31 -05:00 committed by GitHub
parent ff58070a5e
commit 33b61ca2b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 8 deletions

View file

@ -69,7 +69,6 @@ function plugin_init() {
\add_action( 'init', array( __NAMESPACE__ . '\Collection\Followers', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Collection\Followers', 'init' ) );
\add_action( 'init', array( __NAMESPACE__ . '\Admin', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Admin', 'init' ) );
\add_action( 'init', array( __NAMESPACE__ . '\Hashtag', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Hashtag', 'init' ) );
\add_action( 'init', array( __NAMESPACE__ . '\Shortcodes', 'init' ) );
\add_action( 'init', array( __NAMESPACE__ . '\Mention', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Mention', 'init' ) );
\add_action( 'init', array( __NAMESPACE__ . '\Health_Check', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Health_Check', 'init' ) );
\add_action( 'init', array( __NAMESPACE__ . '\Scheduler', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Scheduler', 'init' ) );

View file

@ -5,14 +5,9 @@ use function Activitypub\esc_hashtag;
class Shortcodes { class Shortcodes {
/** /**
* Class constructor, registering WordPress then Shortcodes * Register the shortcodes
*/ */
public static function init() { public static function register() {
// do not load on admin pages
if ( is_admin() ) {
return;
}
foreach ( get_class_methods( self::class ) as $shortcode ) { foreach ( get_class_methods( self::class ) as $shortcode ) {
if ( 'init' !== $shortcode ) { if ( 'init' !== $shortcode ) {
add_shortcode( 'ap_' . $shortcode, array( self::class, $shortcode ) ); add_shortcode( 'ap_' . $shortcode, array( self::class, $shortcode ) );
@ -20,6 +15,17 @@ class Shortcodes {
} }
} }
/**
* Unregister the shortcodes
*/
public static function unregister() {
foreach ( get_class_methods( self::class ) as $shortcode ) {
if ( 'init' !== $shortcode ) {
remove_shortcode( 'ap_' . $shortcode );
}
}
}
/** /**
* Generates output for the 'ap_hashtags' shortcode * Generates output for the 'ap_hashtags' shortcode
* *

View file

@ -5,6 +5,7 @@ use WP_Post;
use Activitypub\Collection\Users; use Activitypub\Collection\Users;
use Activitypub\Model\Blog_User; use Activitypub\Model\Blog_User;
use Activitypub\Activity\Base_Object; use Activitypub\Activity\Base_Object;
use Activitypub\Shortcodes;
use function Activitypub\esc_hashtag; use function Activitypub\esc_hashtag;
use function Activitypub\is_single_user; use function Activitypub\is_single_user;
@ -466,6 +467,8 @@ class Post {
$post = $this->wp_post; $post = $this->wp_post;
$content = $this->get_post_content_template(); $content = $this->get_post_content_template();
// Register our shortcodes just in time.
Shortcodes::register();
// Fill in the shortcodes. // Fill in the shortcodes.
setup_postdata( $post ); setup_postdata( $post );
$content = do_shortcode( $content ); $content = do_shortcode( $content );
@ -477,6 +480,9 @@ class Post {
$content = \apply_filters( 'activitypub_the_content', $content, $post ); $content = \apply_filters( 'activitypub_the_content', $content, $post );
// Don't need these any more, should never appear in a post.
Shortcodes::unregister();
return $content; return $content;
} }

View file

@ -1,6 +1,10 @@
<?php <?php
use Activitypub\Shortcodes;
class Test_Activitypub_Shortcodes extends WP_UnitTestCase { class Test_Activitypub_Shortcodes extends WP_UnitTestCase {
public function test_content() { public function test_content() {
Shortcodes::register();
global $post; global $post;
$post_id = -99; // negative ID, to avoid clash with a valid post $post_id = -99; // negative ID, to avoid clash with a valid post
@ -26,9 +30,11 @@ class Test_Activitypub_Shortcodes extends WP_UnitTestCase {
wp_reset_postdata(); wp_reset_postdata();
$this->assertEquals( '<p>hallo</p>', $content ); $this->assertEquals( '<p>hallo</p>', $content );
Shortcodes::unregister();
} }
public function test_password_protected_content() { public function test_password_protected_content() {
Shortcodes::register();
global $post; global $post;
$post_id = -98; // negative ID, to avoid clash with a valid post $post_id = -98; // negative ID, to avoid clash with a valid post
@ -54,5 +60,6 @@ class Test_Activitypub_Shortcodes extends WP_UnitTestCase {
wp_reset_postdata(); wp_reset_postdata();
$this->assertEquals( '', $content ); $this->assertEquals( '', $content );
Shortcodes::unregister();
} }
} }