diff --git a/.changeset/afraid-panthers-pay.md b/.changeset/afraid-panthers-pay.md new file mode 100644 index 000000000..196e75591 --- /dev/null +++ b/.changeset/afraid-panthers-pay.md @@ -0,0 +1,5 @@ +--- +"@faustwp/wordpress-plugin": patch +--- + +Bug: Fixed an issue with the function content_replacement throwing a 500 error for a null value. diff --git a/plugins/faustwp/includes/replacement/callbacks.php b/plugins/faustwp/includes/replacement/callbacks.php index 84f11ca01..8b8214860 100644 --- a/plugins/faustwp/includes/replacement/callbacks.php +++ b/plugins/faustwp/includes/replacement/callbacks.php @@ -5,6 +5,8 @@ * @package FaustWP */ +declare(strict_types=1); + namespace WPE\FaustWP\Replacement; use function WPE\FaustWP\Settings\{ @@ -27,40 +29,33 @@ /** * Callback for WordPress 'the_content' filter. * - * @param string $content The post content. + * @param ?string $content The post content. * - * @return string The post content. + * @return ?string The post content. */ -function content_replacement( string $content ): string { +function content_replacement( ?string $content ) { if ( ! $content ) { - return ''; + return $content; } - $replace_content_urls = domain_replacement_enabled(); $replace_media_urls = ! use_wp_domain_for_media(); - if ( ! $replace_content_urls && ! $replace_media_urls ) { return $content; } - $wp_site_urls = faustwp_get_wp_site_urls( site_url() ); if ( empty( $wp_site_urls ) ) { return $content; } - $relative_upload_url = faustwp_get_relative_upload_url( $wp_site_urls, wp_upload_dir()['baseurl'] ); $wp_media_urls = faustwp_get_wp_media_urls( $wp_site_urls, $relative_upload_url ); $frontend_uri = (string) faustwp_get_setting( 'frontend_uri' ) ?? '/'; - if ( $replace_content_urls && $replace_media_urls ) { return str_replace( $wp_site_urls, $frontend_uri, $content ); } - if ( $replace_media_urls ) { return str_replace( $wp_media_urls, $frontend_uri . $relative_upload_url, $content ); } - $site_urls_pattern = implode( '|', array_map( 'preg_quote', $wp_site_urls ) ); $pattern = '#(' . $site_urls_pattern . ')(?!' . $relative_upload_url . '(\/|$))#'; diff --git a/plugins/faustwp/includes/replacement/functions.php b/plugins/faustwp/includes/replacement/functions.php index 645aa1eb2..27e4fbda2 100644 --- a/plugins/faustwp/includes/replacement/functions.php +++ b/plugins/faustwp/includes/replacement/functions.php @@ -5,6 +5,8 @@ * @package FaustWP */ +declare(strict_types=1); + namespace WPE\FaustWP\Replacement; use function WPE\FaustWP\Settings\{ @@ -144,7 +146,7 @@ function faustwp_get_wp_site_urls( string $site_url ): array { $host_url = wp_parse_url( $site_url, PHP_URL_HOST ); - $is_https = strpos( $site_url, 0, 6 ) === 'https:'; + $is_https = strpos( $site_url, 'https://' ) === 0; return apply_filters( 'faustwp_get_wp_site_urls', diff --git a/plugins/faustwp/tests/integration/ReplacementCallbacksTests.php b/plugins/faustwp/tests/integration/ReplacementCallbacksTests.php index 1e8728d44..9caefbe75 100644 --- a/plugins/faustwp/tests/integration/ReplacementCallbacksTests.php +++ b/plugins/faustwp/tests/integration/ReplacementCallbacksTests.php @@ -92,6 +92,17 @@ public function test_wp_calculate_image_srcset_filter(): void { self::assertSame( 10, has_action( 'wp_calculate_image_srcset', 'WPE\FaustWP\Replacement\image_source_srcset_replacement' ) ); } + + /** + * Test to make sure content rep can accept null values + */ + public function test_content_replacement_for_different_types() { + $this->assertNull(content_replacement( null)); + $this->assertEmpty(content_replacement('')); + $content = '

This is a string with no URLs to be replaced.

'; + $this->assertEquals($content, content_replacement($content)); + } + /** * Tests content_replacement() returns original value when content replacement is not enabled. */