Cómo evitar que WordPress acorte los slugs largos en el panel de administración

27 ene 2012, 18:34:59
Vistas: 1.48K
Votos: 6

En las páginas de edición de entradas, cuando un slug supera un cierto número de caracteres, WordPress lo acorta con puntos suspensivos (...). Por ejemplo, si mi slug es quiero-poder-ver-este-slug-completo, aparece en la página de edición así:

Enlace permanente: http://ejemplo.com/2012/quiero-poder-ve...-slug-completo/ [ Editar ]

¿Puedo evitar que WordPress haga esto?

Me gustaría poder ver (y copiar) una URL completa sin abreviaturas, así que estoy deseando descubrir cómo eliminar esta característica.

1
Comentarios

solo editar etiquetas para mejor relacionado

bueltge bueltge
27 ene 2012 20:05:38
Todas las respuestas a la pregunta 3
1

Hay un filtro al final de la función: 'get_sample_permalink_html'. Conéctate a este y simplemente reemplaza la forma abreviada con la versión completa.

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

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

/**
 * Reemplaza el permalink acortado con su 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
    );
}

Resultado

Título del post: Este es un título de post bastante largo. WordPress lo acortaría por defecto, pero nuestro bonito plugin lo evita.

Resultado del plugin T5 Unabridge Permalink Slug mostrando el permalink completo

Descargar desde GitHub.

4 jul 2012 04:25:11
Comentarios

¡Hola toscho! Busqué por todas partes la respuesta a esto; no está en ningún otro lugar que yo sepa. ¡¡¡¡Muchas gracias!!!!

MikeSchinkel MikeSchinkel
15 mar 2014 07:57:33
0

No es posible mediante un filtro o un hook de acción. WordPress corta las cadenas de forma rígida en el núcleo. Consulta wp-admin/includes/post.php línea 1110 en 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;
    }
}

Puedes abrir un ticket en el Trac de WordPress para incluir un filtro.

27 ene 2012 19:13:02
1
-4

Como menciona @bueltge en su respuesta, actualmente no hay un filtro o gancho (hook) de acción que permita esto. Aquí está el truco que hice para evitar la abreviación con ....

En el archivo wp-admin/includes/post.php, busca esta línea (en WordPress 3.4.1, es la línea 1117):

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

Cámbiala por esto:

// Cambiado $post_name_abridged por $post_name para evitar abreviación "..." en slugs largos
$post_name_html = '<span id="editable-post-name" title="' . $title . '">' . $post_name . '</span>';

Por supuesto, como esto edita un archivo del núcleo, el cambio se sobrescribirá cada vez que una nueva versión de WordPress actualice este archivo.

Si alguien puede recomendar una forma de lograrlo sin modificar el núcleo, ciertamente preferiría eso antes que esta solución.

1 jul 2012 22:03:48
Comentarios

No deberías editar archivos principales. Mira la respuesta de @toscho para una solución alternativa.

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