web-dev-qa-db-fra.com

Utiliser des traits de soulignement au lieu de traits d'union dans le permalien

Quel est le meilleur moyen de s'assurer que les slugs de publication et de page utilisent des traits de soulignement au lieu de traits d'union, sans avoir besoin de modifier le slug manuellement (ou de mettre à jour la page manuellement)

Permalien actuel:

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

Permalien souhaité

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

L’une des méthodes que j’ai essayée est d’attacher sanitize_title, mais cela ne semble s’appeler que lorsque le message est mis à jour, ce qui n’est pas très pratique pour un blog de plusieurs milliers. Est-il possible de forcer chaque message à se mettre à jour?

J'ai besoin de cela pour préserver la compatibilité, car un ancien site MovableType est transféré dans WordPress. L'utilisation de .htaccess n'est pas vraiment une option.

2
anu

L’accrochage OMI dans sanitize_title est probablement la meilleure solution. Découvrez ce plugin de Mark Jaquith qui fait quelque chose de similaire: http://txfx.net/files/wordpress/periods-in-titles.phps

En ce qui concerne la mise à jour des anciens messages, je voudrais juste écrire un script simple qui générerait SQL pour tout mettre à jour manuellement. (code non testé)

<?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};"
}
?>

Ce n’est probablement pas la solution la plus élégante, mais pour quelque chose qui n’a besoin que d’être fait une fois, cela devrait plutôt bien fonctionner.

6
mfields

Donc, c’est ce que j’ai trouvé, après la conversion des slugs du contenu importé, celui-ci est relié à sanitize_links. Les deux dernières règles sont de garder la compatibilité avec le schéma de permalien utilisé de Movable Type (et cela ne concerne pas que des traits d'union)

Je suis sûr que ce n'est pas le plus efficace, mais cela pourrait aider quelqu'un.

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;

}

0
anu