0

I have error in permalink, I have post that title is big like :-

مراجعة : Sony Xperia Z2 و إيجابياته و سلبياته و كل ما تريد معرفته عن الجهاز !

Now when open the post in my site i see permalink like :-

www.domain.com/مراجعة-sony-xperia-z2-و-إيجابياته-و-سلبياته-و-كل-ما

Its read only 11 word

But i set the permalink structure is /%postname%/.

Why its not get all post title ?

update:-

I search and see this code that solved my problem :-

// first of all lets remove standard hook
remove_filter( 'sanitize_title', 'sanitize_title_with_dashes' );

// add our custom hook 
add_filter( 'sanitize_title', 'wpse8170_sanitize_title_with_dashes', 10, 3 );
function wpse8170_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;
}
10
  • 2
    You said "arabic permalinks" but you posted a Roman. Confused to gasp the question. Commented Oct 22, 2014 at 11:16
  • Have you tried with more than one? Are they all cut off at the same length (only the %postname% part, not the domain)? And if yes. What is the length?
    – kaiser
    Commented Oct 22, 2014 at 11:54
  • @MayeenulIslam i edit my post Commented Oct 22, 2014 at 12:26
  • 2
    @Kaiser is telling you to do some more tests with different titles. Also mention after how many characters/letters(not word) the URL's get cut with each title.
    – sakibmoon
    Commented Oct 22, 2014 at 12:55
  • 1
    @The15Seconds Please add your solution not in the question, but as an answer, and accept the answer by clicking on the checkmark so that some other will be benefited. :) And, don't forget to mention the source, from where you got the code. :) Commented Oct 22, 2014 at 14:41

1 Answer 1

1

It depends on what encoding you are using. If you look at the database structure of wp_posts, you will see that post_name field is varchar(200)

So, at most it can store 200 bytes of data. If you are using UTF-16 encoding, it needs 4 bytes to store an Arabic character. So, at most it can store 50 Arabic characters.

For different encoding, it will be different. See https://stackoverflow.com/questions/4322191/how-many-bytes-do-we-need-to-store-an-arabic-character

1
  • Thank, I set the post_name like as post_title and nothing new. what can i do ?? Commented Oct 22, 2014 at 12:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.