it-swarm.dev

Utilizzo di caratteri di sottolineatura anziché di trattini nel permalink

Qual è il modo migliore per garantire che le slug post e pagina utilizzino caratteri di sottolineatura anziché trattini, senza dover modificare manualmente lo slug (o aggiornare manualmente la pagina)

Permalink corrente:

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

Permalink desiderato

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

Un approccio che ho provato è quello di collegare sanitize_title, ma questo sembra essere chiamato solo quando il post viene aggiornato, quindi non molto pratico per un blog di diverse migliaia di post. C'è un modo per forzare ogni post ad aggiornare?

Ho bisogno di questo per preservare la compatibilità man mano che un vecchio sito MovableType viene spostato in WordPress - utilizzando .htaccess non è davvero un'opzione

2
anu

L'IMO che si collega a sanitize_title è probabilmente il modo migliore per andare qui. Dai un'occhiata a questo plugin di Mark Jaquith che fa qualcosa di simile: http://txfx.net/files/wordpress/periods-in-titles.phps

Per quanto riguarda l'aggiornamento dei vecchi post, vorrei semplicemente scrivere un semplice script che generasse sql per aggiornare manualmente tutto. (codice non testato)

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

Probabilmente non è la soluzione più elegante, ma per qualcosa che deve essere fatto una sola volta, dovrebbe funzionare piuttosto bene.

6
mfields

Quindi, questo è quello che ho finito, dopo aver convertito le lumache del contenuto importato, questo è agganciato a sanitize_links. Le ultime 2 regole sono di mantenere la compatibilità con lo schema di permalink Movable Type in uso (e si occupa di più di semplici trattini)

Sono sicuro che non è il più efficiente, ma potrebbe aiutare qualcuno.

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