Skip to content

Instantly share code, notes, and snippets.

@litonarefin
Created December 23, 2024 02:52
Show Gist options
  • Save litonarefin/f07daa1efb8b060ad25dcb949426b725 to your computer and use it in GitHub Desktop.
Save litonarefin/f07daa1efb8b060ad25dcb949426b725 to your computer and use it in GitHub Desktop.
Extended Post Name Limit
<?php
/**
* Plugin Name: Extended Post Name Limit
* Description: Increase the character limit for post names in WordPress.
*/
// First, remove the standard hook.
remove_filter( 'sanitize_title', 'sanitize_title_with_dashes' );
// More info here: https://wordpress.stackexchange.com/questions/89767/how-to-increase-the-character-limit-for-post-name-of-200
// Add our custom hook.
add_filter( 'sanitize_title', 'pixarlabs_sanitize_title_with_dashes', 10, 3 );
function pixarlabs_sanitize_title_with_dashes( $title, $raw_title = '', $context = 'display' ) {
$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, 1000 ); // <--- Here is the trick!
}
$title = strtolower( $title );
$title = preg_replace( '/&.+?;/', '', $title ); // Kill entities.
$title = str_replace( '.', '-', $title );
if ( 'save' === $context ) {
// Convert nbsp, ndash, and mdash to hyphens.
$title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $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',
// Grave accent, acute accent, macron, caron.
'%cc%80', '%cc%81', '%cc%84', '%cc%8c',
), '', $title );
// Convert times to x.
$title = str_replace( '%c3%97', 'x', $title );
}
$title = preg_replace( '/[^%a-z0-9 _-]/', '', $title );
$title = preg_replace( '/\s+/', '-', $title );
$title = preg_replace( '|-+|', '-', $title );
$title = trim( $title, '-' );
return $title;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment