Skip to content

Commit

Permalink
Merge pull request #14 from timohubois/fixWpmlTrailingSlashes
Browse files Browse the repository at this point in the history
feat(Wpml): force trailing slashes
  • Loading branch information
timohubois authored Jul 16, 2024
2 parents f616f88 + c8d140d commit 9d87c49
Showing 1 changed file with 31 additions and 18 deletions.
49 changes: 31 additions & 18 deletions classes/Compatibility/Wpml.php
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ public function setRewriteRulesArray(array $rules): array
return $rules;
}

public function getTranslatedPermalinkBaseUri(string $baseUri, string $postType, string $language): string|null
private function getTranslatedPermalinkBaseUri(string $baseUri, string $postType, string $language): string|null
{
$defaultLanguage = apply_filters('wpml_default_language', null);
$baseUriDefaultLanguage = apply_filters('wpml_translate_single_string', $baseUri, 'WordPress', 'URL slug: ' . $postType, $defaultLanguage);
Expand All @@ -244,13 +244,13 @@ public function getPostTypeLink(string $postLink, WP_Post $wpPost): string
$optionsReadingPostTypes = OptionsReadingPostTypes::getInstance()->getOptions();

if ($optionsReadingPostTypes === [] || $optionsReadingPostTypes === false) {
return $postLink;
return trailingslashit($postLink);
}

$pageForArchiveId = $optionsReadingPostTypes[$postType] ?? null;

if (!$pageForArchiveId) {
return $postLink;
return trailingslashit($postLink);
}

$postLanguageDetails = apply_filters('wpml_post_language_details', null, $wpPost->ID);
Expand All @@ -267,47 +267,47 @@ public function getPostTypeLink(string $postLink, WP_Post $wpPost): string
}

if ($postLanguage === $defaultLanguage) {
return $postLink;
return trailingslashit($postLink);
}

$baseUri = $optionsPermalinksPostTypes[$postType] ?? null;
if (!$baseUri) {
return $postLink;
return trailingslashit($postLink);
}

// Get translation of the base URI
$baseUriDefaultLanguage = apply_filters('wpml_translate_single_string', $baseUri, 'WordPress', 'URL slug: ' . $postType, $defaultLanguage);
$baseUriCurrentLanguage = apply_filters('wpml_translate_single_string', $baseUri, 'WordPress', 'URL slug: ' . $postType, $postLanguage);
$postLink = str_replace($baseUriDefaultLanguage, $baseUriCurrentLanguage, $postLink);

return $postLink;
return trailingslashit($postLink);
}

public function getPostTypeArchiveLink(string $link, string $post_type): string
{
$optionsReadingPostTypes = OptionsReadingPostTypes::getInstance()->getOptions();

if ($optionsReadingPostTypes === [] || $optionsReadingPostTypes === false) {
return $link;
return trailingslashit($link);
}

$pageForArchiveId = $optionsReadingPostTypes[$post_type] ?? null;
$currentLanguage = apply_filters('wpml_current_language', null);

if ($optionsReadingPostTypes === [] || $optionsReadingPostTypes === false || empty($currentLanguage) || empty($currentLanguage)) {
return $link;
return trailingslashit($link);
}

$pageForArchiveUri = $this->getPageForArchiveUri($pageForArchiveId, $currentLanguage);
return home_url($pageForArchiveUri) ?: $link;
return trailingslashit(home_url($pageForArchiveUri)) ?: trailingslashit($link);
}

public function setWpmlLsLanguageUrls(string $url, array $langs): string
{
$optionsReadingPostTypes = OptionsReadingPostTypes::getInstance()->getOptions();

if ($optionsReadingPostTypes === [] || $optionsReadingPostTypes === false) {
return $url;
return trailingslashit($url);
}

foreach ($optionsReadingPostTypes as $postType => $postId) {
Expand All @@ -318,10 +318,10 @@ public function setWpmlLsLanguageUrls(string $url, array $langs): string
$returnOriginalIfMissing = false;
$wpmlObjectId = $this->getWpmlObjectId($postId, $postType, $returnOriginalIfMissing, $langs['code']);
$pageUri = get_page_uri($wpmlObjectId);
return apply_filters('wpml_permalink', home_url($pageUri), $langs['code']);
return trailingslashit(apply_filters('wpml_permalink', home_url($pageUri), $langs['code']));
}

return $url;
return trailingslashit($url);
}

public function setWpmlAlternateHrefLang(string $url, string $code): string
Expand All @@ -330,7 +330,7 @@ public function setWpmlAlternateHrefLang(string $url, string $code): string
$optionsReadingPostTypes = OptionsReadingPostTypes::getInstance()->getOptions();

if ($optionsReadingPostTypes === [] || $optionsReadingPostTypes === false) {
return $url;
return trailingslashit($url);
}

foreach ($optionsReadingPostTypes as $postType => $postId) {
Expand All @@ -341,10 +341,10 @@ public function setWpmlAlternateHrefLang(string $url, string $code): string
$returnOriginalIfMissing = false;
$wpmlObjectId = $this->getWpmlObjectId($postId, $postType, $returnOriginalIfMissing, $code);
$pageUri = get_page_uri($wpmlObjectId);
return apply_filters('wpml_permalink', home_url($pageUri), $code);
return trailingslashit(apply_filters('wpml_permalink', home_url($pageUri), $code));
}

return $url;
return trailingslashit($url);
}

public function setIcLsLanguages(array $languages): array
Expand All @@ -360,7 +360,7 @@ public function setIcLsLanguages(array $languages): array
$optionsReadingPostTypes = OptionsReadingPostTypes::getInstance()->getOptions();

if ($optionsReadingPostTypes === [] || $optionsReadingPostTypes === false) {
return $languages;
return $this->addTrailingSlashToIcLsLanguagesUrls($languages);
}

$postId = get_the_ID();
Expand All @@ -372,7 +372,7 @@ public function setIcLsLanguages(array $languages): array
$isCustomPostTypeSingle = ($postType !== 'post' && $postType !== 'page');

if ($isPage || !$isCustomPostTypeSingle) {
return $languages;
return $this->addTrailingSlashToIcLsLanguagesUrls($languages);
}

foreach ($languages as $key => $language) {
Expand All @@ -391,7 +391,7 @@ public function setIcLsLanguages(array $languages): array
$languages[$key]['url'] = apply_filters('wpml_permalink', home_url($pageForArchiveUri), $language['code']);
}

return $languages;
return $this->addTrailingSlashToIcLsLanguagesUrls($languages);
}

// Archive pages handling
Expand All @@ -408,6 +408,19 @@ public function setIcLsLanguages(array $languages): array
}
}

return $this->addTrailingSlashToIcLsLanguagesUrls($languages);
}

private function addTrailingSlashToIcLsLanguagesUrls(array $languages): array
{
foreach ($languages as $key => $language) {
if (!isset($language['url']) || !is_string($language['url'])) {
continue;
}

$languages[$key]['url'] = trailingslashit($language['url']);
}

return $languages;
}

Expand Down

0 comments on commit 9d87c49

Please sign in to comment.