Skip to content

Commit 2be8bfe

Browse files
committed
Fix for #1986. Fixes various issues with content replacement callback and also updates tests to use WP 6.6 and 6.7
Fixes various issues with using content replacement for the site URL.
1 parent 836009b commit 2be8bfe

File tree

8 files changed

+291
-27
lines changed

8 files changed

+291
-27
lines changed

.github/workflows/unit-test-plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
runs-on: ubuntu-22.04
1212
strategy:
1313
matrix:
14-
wordpress: [ '6.5', '6.4', '6.3', '6.2', '6.1' ]
14+
wordpress: [ '6.7', '6.6', '6.5', '6.4', '6.3', '6.2', '6.1' ]
1515
steps:
1616
- name: Checkout
1717
uses: actions/checkout@v4

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ process.yml
1111
!.env.local.sample
1212
build/
1313
faustjs.code-workspace
14+
plugins/faustwp/.docker/plugins/akismet/
15+
plugins/faustwp/.docker/plugins/hello.php
16+
plugins/faustwp/.docker/plugins/index.php
1417

1518
# Ignore the WordPress source where used by various development environments
1619
wordpress/

plugins/faustwp/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ services:
1111
links:
1212
- db
1313
environment:
14-
WP_VERSION: ${WP_VERSION:-6.5}
14+
WP_VERSION: ${WP_VERSION:-6.7}
1515
WORDPRESS_DB_HOST: db
1616
WORDPRESS_DB_NAME: wordpress
1717
WORDPRESS_DB_USER: root

plugins/faustwp/faustwp.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
1010
* Text Domain: faustwp
1111
* Domain Path: /languages
12-
* Version: 1.5.0
12+
* Version: 1.5.1
1313
* Requires PHP: 7.2
1414
* Requires at least: 5.7
1515
* Update URI: false

plugins/faustwp/includes/replacement/callbacks.php

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,36 +31,50 @@
3131
*
3232
* @return string The post content.
3333
*/
34-
function content_replacement( $content ) {
35-
$use_wp_domain_for_permalinks = ! domain_replacement_enabled();
36-
$use_wp_domain_for_media = use_wp_domain_for_media();
34+
function content_replacement( string $content ): string {
3735

38-
if ( $use_wp_domain_for_permalinks && $use_wp_domain_for_media ) {
36+
$replace_content_urls = domain_replacement_enabled();
37+
$replace_media_urls = ! use_wp_domain_for_media();
38+
39+
if ( ! $replace_content_urls && ! $replace_media_urls ) {
40+
return $content;
41+
}
42+
43+
$wp_site_urls = faustwp_get_wp_site_urls();
44+
if (empty($wp_site_urls)) {
3945
return $content;
4046
}
4147

42-
$replacement = faustwp_get_setting( 'frontend_uri' );
43-
if ( ! $replacement ) {
44-
$replacement = '/';
48+
$wp_media_urls = faustwp_get_wp_media_urls();
49+
$relative_upload_url = faustwp_get_relative_upload_url( $wp_site_urls );
50+
$frontend_uri = faustwp_get_setting( 'frontend_uri' );
51+
if ( ! $frontend_uri ) {
52+
$frontend_uri = '/';
4553
}
4654

47-
$site_url = site_url();
48-
$media_dir = str_replace( $site_url, '', wp_upload_dir()['baseurl'] );
49-
$media_url = $site_url . $media_dir;
55+
if ( $replace_content_urls && $replace_media_urls ) {
56+
57+
foreach ( $wp_site_urls as $site_url ) {
58+
$content = str_replace( $site_url, $frontend_uri, $content );
59+
}
5060

51-
if ( $use_wp_domain_for_permalinks && ! $use_wp_domain_for_media ) {
52-
$content = str_replace( $media_url, $replacement . $media_dir, $content );
5361
return $content;
5462
}
5563

56-
if ( ! $use_wp_domain_for_permalinks && ! $use_wp_domain_for_media ) {
57-
$content = str_replace( $site_url, $replacement, $content );
64+
65+
if ( $replace_media_urls ) {
66+
$wp_media_site_url = $frontend_uri . $relative_upload_url;
67+
68+
foreach ( $wp_media_urls as $media_url ) {
69+
$content = str_replace( $media_url, $wp_media_site_url, $content );
70+
}
71+
5872
return $content;
5973
}
6074

61-
if ( ! $use_wp_domain_for_permalinks && $use_wp_domain_for_media ) {
62-
$content = preg_replace( "#{$site_url}(?!{$media_dir})#", "{$replacement}", $content );
63-
return $content;
75+
foreach ( $wp_site_urls as $site_url ) {
76+
$pattern_exclude_media_urls = "#" . preg_quote( $site_url, '#' ) . "(?!{$relative_upload_url}(\/|$))#";
77+
$content = preg_replace( $pattern_exclude_media_urls, $frontend_uri, $content );
6478
}
6579

6680
return $content;
@@ -102,6 +116,7 @@ function image_source_srcset_replacement( $sources ) {
102116
$frontend_uri = faustwp_get_setting( 'frontend_uri' );
103117
$site_url = site_url();
104118

119+
105120
/**
106121
* For urls with no domain or the frontend domain, replace with the WP site_url.
107122
* This was the default replacement pattern until Faust 1.2, at which point this

plugins/faustwp/includes/replacement/functions.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,65 @@ function is_wp_link_ajax_request(): bool {
131131
&& ! empty( $_POST['action'] )
132132
&& 'wp-link-ajax' === $_POST['action'] );
133133
}
134+
135+
/**
136+
* Get all site URLs for each HTTP schema
137+
*
138+
* @return array
139+
*/
140+
function faustwp_get_wp_site_urls() {
141+
142+
$site_url = site_url();
143+
$host_url = parse_url( $site_url, PHP_URL_HOST );
144+
145+
if ( is_string( $host_url ) ) {
146+
$urls = [
147+
'https://' . $host_url,
148+
'http://' . $host_url,
149+
'//' . $host_url,
150+
];
151+
} else {
152+
$urls = [ $site_url ];
153+
}
154+
155+
156+
return apply_filters( 'faustwp_get_wp_site_urls', $urls );
157+
}
158+
159+
/**
160+
* Get all media urls based off the available site urls
161+
*
162+
* @return array
163+
*/
164+
function faustwp_get_wp_media_urls() {
165+
$site_urls = faustwp_get_wp_site_urls();
166+
$upload_url = faustwp_get_relative_upload_url( $site_urls );
167+
168+
if ( ! is_string( $upload_url ) ) {
169+
return apply_filters( 'faustwp_get_wp_site_media_urls', [] );
170+
}
171+
172+
$media_urls = [];
173+
foreach ( $site_urls as $site_url ) {
174+
$media_urls[] = $site_url . $upload_url;
175+
}
176+
177+
return apply_filters( 'faustwp_get_wp_site_media_urls', $media_urls );
178+
}
179+
180+
181+
/**
182+
* @param array $site_urls
183+
*
184+
* @return false|string
185+
*/
186+
function faustwp_get_relative_upload_url( array $site_urls ) {
187+
$upload_dir = wp_upload_dir()['baseurl'];
188+
foreach ( $site_urls as $site_url ) {
189+
if ( strpos( $upload_dir, $site_url ) !== false ) {
190+
return (string) str_replace( $site_url, '', $upload_dir );
191+
}
192+
}
193+
194+
return false;
195+
}

plugins/faustwp/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"name": "@faustwp/wordpress-plugin",
3-
"version": "1.5.0",
3+
"version": "1.5.1",
44
"private": true
55
}

0 commit comments

Comments
 (0)