Usar guiones bajos en lugar de guiones en el enlace permanente

2

¿Cuál es la mejor manera de garantizar que las barras de publicación y de página utilicen guiones bajos en lugar de guiones, sin necesidad de editar la barra manualmente (o actualizar la página manualmente)

Enlace permanente actual:

www.<domain>.com/2011/05/this-is-a-test-post/

Enlace permanente deseado

www.<domain>.com/2011/05/this_is_a_test_post/

Un enfoque que he intentado es enlazar a sanitize_title , pero parece que solo se llama cuando se actualiza la publicación, por lo que no es muy práctico para un blog de varios miles de publicaciones. ¿Hay alguna forma de forzar la actualización de cada publicación?

Necesito esto para preservar la compatibilidad, ya que un sitio MovableType antiguo se traslada a WordPress. El uso de .htaccess no es realmente una opción

    
pregunta anu 11.05.2011 - 14:58

2 respuestas

6

El enganche de IMO a sanitize_title es probablemente la mejor manera de ir aquí. Echa un vistazo a este complemento de Mark Jaquith que hace algo similar: enlace

En cuanto a la actualización de las publicaciones anteriores, solo escribiría un script simple que generaría sql para actualizar todo manualmente. (código no probado)

<?php
function sanitize_title_with_underscores( $title ) {
    return str_replace( '-', '_', sanitize_title_with_dashes( $title ) );
}

$posts = get_posts( array( 'numberposts' => -1 ) );

foreach ( $posts as $post ) {
    global $wpdb;
    $id = absint( $post->ID );
    $name = sanitize_title_with_underscores( $post->post_name );
    print "\n" . "UPDATE $wpdb->posts SET post_name = '{$name}' WHERE ID = {$id};"
}
?>

Probablemente no sea la solución más elegante, pero para algo que solo debe hacerse una vez, debería funcionar bastante bien.

    
respondido por el mfields 11.05.2011 - 16:29
0

Entonces, esto es con lo que terminé, después de convertir las bugs del contenido importado, esto se engancha en sanitize_links. Las últimas 2 reglas son mantener la compatibilidad con el esquema de Moval Type que se está utilizando (y se trata de algo más que guiones)

Estoy seguro de que no es el más eficiente, pero podría ayudar a alguien.

function convert_permalinks( $old_slug ){

global $post;

if (!get_post_type() == "post") {
    return $old_slug;
}

# replace hyphens with underscores
# replace apostrophes with spaces
#if last char is an underscore, remove it.
$search_values = array("-", "–","‘","'","’","“","”");
$replace_values = array("_","");

// if there are no hyphens then skip
if (! preg_match('/-/',$old_slug))
    return $old_slug;


$new_slug = str_replace( $search_values, $replace_values, urldecode($old_slug));

if (strlen($new_slug) > 30)
    $new_slug = trim(substr($new_slug,0,30));

if ($new_slug[strlen($new_slug)-1] == "_")
    $new_slug = substr($old_slug,0,strlen($new_slug)-1);

return $new_slug;

}

    
respondido por el anu 17.05.2011 - 13:28

Lea otras preguntas en las etiquetas