Last active
March 14, 2019 11:56
-
-
Save avenirer/640c3f05a7af231273d9284517493081 to your computer and use it in GitHub Desktop.
Wordpress - allow any extension
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Solution started from: https://wordpress.stackexchange.com/questions/231448/how-to-add-dot-in-post-slug | |
// This will allow the "." character inside urls | |
function allow_htm_extensions( $title, $raw_title = '', $context = 'display' ) { | |
// IN HERE WE WRITE THE ACCEPTED EXTENSIONS | |
$allowed_extensions = array('.htm','.html'); | |
$title = strip_tags($title); | |
// Preserve escaped octets. | |
$title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title); | |
// Remove percent signs that are not part of an octet. | |
$title = str_replace('%', '', $title); | |
// Restore octets. | |
$title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title); | |
if (seems_utf8($title)) { | |
if (function_exists('mb_strtolower')) { | |
$title = mb_strtolower($title, 'UTF-8'); | |
} | |
$title = utf8_uri_encode($title, 200); | |
} | |
$title = strtolower($title); | |
if ( 'save' == $context ) { | |
// Convert nbsp, ndash and mdash to hyphens | |
$title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title ); | |
// Convert nbsp, ndash and mdash HTML entities to hyphens | |
$title = str_replace( array( ' ', ' ', '–', '–', '—', '—' ), '-', $title ); | |
// Strip these characters entirely | |
$title = str_replace( array( | |
// iexcl and iquest | |
'%c2%a1', '%c2%bf', | |
// angle quotes | |
'%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba', | |
// curly quotes | |
'%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d', | |
'%e2%80%9a', '%e2%80%9b', '%e2%80%9e', '%e2%80%9f', | |
// copy, reg, deg, hellip and trade | |
'%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2', | |
// acute accents | |
'%c2%b4', '%cb%8a', '%cc%81', '%cd%81', | |
// grave accent, macron, caron | |
'%cc%80', '%cc%84', '%cc%8c', | |
), '', $title ); | |
// Convert times to x | |
$title = str_replace( '%c3%97', 'x', $title ); | |
} | |
$title = preg_replace('/&.+?;/', '', $title); // kill entities | |
foreach($allowed_extensions as $extension) { | |
if(strlen($title) > strlen($extension)) { | |
$position = strpos($title, $extension, (strlen($extension) * (-1))); | |
if ($position !== false) { | |
$title = substr($title, 0, $position); | |
$url_ext = $extension; | |
break; | |
} | |
} | |
} | |
$title = str_replace('.', '-', $title); | |
// WPSE-231448: Add the dot to the list of characters NOT to be stripped. | |
$title = preg_replace('/[^%a-z0-9 _\-]/', '', $title); | |
$title = preg_replace('/\s+/', '-', $title); | |
$title = preg_replace('|-+|', '-', $title); | |
$title = trim($title, '-'); | |
$title = (isset($url_ext)) ? $title.$url_ext : $title; | |
return $title; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment