web-dev-qa-db-fra.com

Limiter le nombre de mots ou de caractères dans le slug/permalien

Limiter le nombre de mots ou de caractères dans Wordpress slug/permalink. Je voudrais limiter le nombre aux 5 premiers mots (ou 20 caractères) même si le titre du post est plus long.
Exemple:
Titre: Bienvenue sur mon site - ceci est mon premier post
url: mysite.com/welcome-to-my-site

Une certaine fonction ou une modification dans le noyau Wordpress pour atteindre ce résultat?

3
BóbGCA

Vous pouvez probablement faire quelque chose avec le hook sanitize_title en fonction du contexte, mais je ne connais pas suffisamment l'endroit où sanitize_title est utilisé pour affirmer avec certitude qu'il s'agit d'une bonne solution. L'astuce consiste à limiter votre slug sans inclure de mots stupides qui vont nuire à votre référencement. Comme point de départ, essayez ceci:

add_filter( 'sanitize_title', 'wpse52690_limit_length', 1, 3 );

function wpse52690_limit_length( $title, $raw_title, $context ) {
    //  filters
    if( $context != 'save' )
        return $title;

    //  vars
    $desired_length = 20; //number of chars
    $desired_words = 5; //number of words
    $prohibited = array(
        'the'
        ,'in'
        ,'my'
        ,'etc'
        //put any more words you do not want to be in the slug in this array
    );

    //  do the actual work
    // filter out unwanted words
    $_title = explode( ' ', $title );
    //if you want more than one switch to preg_split()
    $_title = array_diff( $_title, $prohibited );
    // count letters and recombine
    $new_title = '';
    for( $i=0, $count=count($_title); $i<$count; $i++ ) {
        //check for number of words
        if( $i > $desired_words )
            break;
        //check for number of letters
        if( mb_strlen( $new_title.' '.$_title[$i] ) > $desired_length )
            break;

        if( $i != 0 )
            $new_title .= ' ';
        $new_title .= $_title[$i];
    }

    return $new_title;
}

Notez que cela n’a pas été testé et que je l’ai écrit littéralement. Il peut donc y avoir quelques problèmes, mais c’est un bon point de départ pour vous.

1
mor7ifer