Impedire a WordPress di abbreviare gli slug lunghi nell'area di amministrazione

27 gen 2012, 18:34:59
Visualizzazioni: 1.48K
Voti: 6

Nelle pagine di modifica degli articoli, quando uno slug supera un certo numero di caratteri, WordPress lo abbrevia con i puntini di sospensione (...). Ad esempio, se il mio slug è voglio-essere-in-grado-di-vedere-questo-slug, appare nella pagina di modifica in questo modo:

Permalink: http://esempio.com/2012/voglio-essere...-vedere-questo-slug/ [ Modifica ]

Posso impedire a WordPress di farlo?

Mi piacerebbe poter vedere (e copiare) un URL completo senza oscuramento, quindi sono davvero curioso di scoprire come disabilitare questa funzionalità.

1
Commenti

modifica solo i tag per una migliore correlazione

bueltge bueltge
27 gen 2012 20:05:38
Tutte le risposte alla domanda 3
1

C'è un filtro alla fine della funzione: 'get_sample_permalink_html'. Agganciati a questo e sostituisci semplicemente la forma abbreviata con quella completa.

<?php # -*- coding: utf-8 -*-
/* Plugin Name: T5 Unabridge Permalink Slug */

add_filter( 'get_sample_permalink_html', 't5_unabridge_sample_permalink', 10, 2 );

/**
 * Sostituisce il permalink abbreviato con la sua forma completa.
 *
 * @param  string $sample HTML del permalink
 * @param  int    $id ID del post
 * @return string
 */
function t5_unabridge_sample_permalink( $sample, $id )
{
    $link = get_sample_permalink( $id );
    $s1   = '<span id="editable-post-name" ';
    $s2   = '</span>';

    return preg_replace(
        '~' . $s1 . '([^>]*)>([^<]*)' . $s2 . '~Ui',
        $s1 . '$1>' . $link[1] . $s2,
        $sample
    );
}

Risultato

Titolo del post: Questo è un titolo di post piuttosto lungo. WordPress lo abbrevierebbe di default, ma il nostro bel plugin lo impedisce.

Esempio di permalink completo

Scarica da GitHub.

4 lug 2012 04:25:11
Commenti

Ciao toscho - Ho cercato ovunque la risposta a questo; non la trovo da nessun'altra parte per quanto ne so! Grazie mille!!!!

MikeSchinkel MikeSchinkel
15 mar 2014 07:57:33
0

Non è possibile tramite un filtro o un action hook. WordPress taglia le stringhe in modo rigido nel core. Vedi wp-admin/includes/post.php riga 1110 in WP 3.4 alpha.

if ( function_exists('mb_strlen') ) {
    if ( mb_strlen($post_name) > 30 ) {
        $post_name_abridged = mb_substr($post_name, 0, 14). '&hellip;' . mb_substr($post_name, -14);
    } else {
        $post_name_abridged = $post_name;
    }
} else {
    if ( strlen($post_name) > 30 ) {
        $post_name_abridged = substr($post_name, 0, 14). '&hellip;' . substr($post_name, -14);
    } else {
        $post_name_abridged = $post_name;
    }
}

Puoi aprire un ticket sul Trac di WordPress per includere un filtro.

27 gen 2012 19:13:02
1
-4

Come nota @bueltge nella sua risposta, attualmente non esiste un filtro o un hook che permetta questo. Ecco l'hack che ho utilizzato per prevenire l'abbreviazione ....

Nel file wp-admin/includes/post.php, trova questa riga (in Wordpress 3.4.1, è la riga 1117):

$post_name_html = '<span id="editable-post-name" title="' . $title . '">' . $post_name_abridged . '</span>';

Modificala in questo modo:

// Cambiato $post_name_abridged in $post_name per prevenire l'abbreviazione "..." degli slug lunghi
$post_name_html = '<span id="editable-post-name" title="' . $title . '">' . $post_name . '</span>';

Ovviamente, poiché questo modifica un file del core, la modifica verrà sovrascritta ogni volta che una nuova versione di Wordpress aggiornerà questo file.

Se qualcuno può suggerire un modo per ottenere questo risultato senza modificare i file del core, lo preferirei sicuramente a questa soluzione.

1 lug 2012 22:03:48
Commenti

Non dovresti modificare i file core. Vedi la risposta di @toscho per una soluzione alternativa.

Stephen Harris Stephen Harris
4 lug 2012 20:31:17