Verwenden von Unterstrichen anstelle von Bindestrichen im Permalink

Was ist der beste Weg, um sicherzustellen, dass Post- und Seiten-Slugs Unterstriche anstelle von Bindestrichen verwenden, ohne dass der Slug manuell bearbeitet werden muss (oder die Seite manuell aktualisiert wird)?

Aktueller Permalink:

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

Gewünschter Permalink

 www..com/2011/05/this_is_a_test_post/ 

Ein Ansatz, den ich ausprobiert habe, ist, sich in sanitize_title , aber das scheint nur aufgerufen zu werden, wenn der Post aktualisiert wird, also für einen Blog von mehreren tausend Post nicht sehr praktisch. Gibt es eine Möglichkeit, um jeden Beitrag zu aktualisieren?

Ich brauche das, um die Kompatibilität zu erhalten, wenn eine alte MovableType-Site in WordPress verschoben wird – die Verwendung von .htaccess ist nicht wirklich eine Option

Solutions Collecting From Web of "Verwenden von Unterstrichen anstelle von Bindestrichen im Permalink"

IMO Hooking in sanitize_title ist wahrscheinlich der beste Weg, um hier zu gehen. Schauen Sie sich dieses Plugin von Mark Jaquith an, das etwas ähnliches tut: http://txfx.net/files/wordpress/periods-in-titles.phps

Wie für das Aktualisieren der alten Beiträge, würde ich nur ein einfaches Skript schreiben, das sql erzeugen würde, um alles manuell zu aktualisieren. (Code nicht getestet)

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

Wahrscheinlich nicht die eleganteste Lösung, aber für etwas, das nur einmal gemacht werden muss, sollte es ziemlich gut funktionieren.

Also, das ist, was ich am Ende, nach dem Konvertieren der Schnecken des importierten Inhalts, wird dies in sanitize_links eingehakt. Die letzten beiden Regeln sollen die Kompatibilität mit dem verwendeten Movable Type Permalink-Schema gewährleisten (und es werden mehr als nur Bindestriche behandelt)

Ich bin sicher, es ist nicht die effizienteste, aber es könnte jemandem helfen.

 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; 

}