Wie ändere ich den Fall aller Posttitel in “Title Case”?

Ich helfe meinem Vater mit seiner WordPress-Website.
Es hat über 1.700 Posts mit Titeln in Großbuchstaben.

Wir möchten diese in “Title Case” in der database ändern (möglicherweise unter Verwendung dieses PHP-Skripts ).

Das WordPress Plug-In “To Title Case” ändert den Fall auf Template-Ebene – wir möchten es auf databaseebene ändern.

Was wäre der beste Weg, um das Skript auf alle Titel in der WordPress-database anzuwenden?
Ich könnte etwas Code von Grund auf neu schreiben, aber ich vermute, es gibt existierende Code / Methoden, die eine function / Methode auf alle Titel anwenden können.

Solutions Collecting From Web of "Wie ändere ich den Fall aller Posttitel in “Title Case”?"

Aktualisierung der Posts

$all_posts = get_posts( 'posts_per_page' => -1, 'post_type' => 'post' ); foreach ( $all_posts as $single ) { wp_update_post( array( 'ID' => $single->ID, 'post_title' => to_title_case( $single->post_title ) // see function below )); } 

Konvertieren einer Zeichenfolge in “Title Case”

Und, obwohl es für WP nicht relevant ist, der Vollständigkeit halber:

 function to_title_case( $string ) { /* Words that should be entirely lower-case */ $articles_conjunctions_prepositions = array( 'a','an','the', 'and','but','or','nor', 'if','then','else','when', 'at','by','from','for','in', 'off','on','out','over','to','into','with' ); /* Words that should be entirely upper-case (need to be lower-case in this list!) */ $acronyms_and_such = array( 'asap', 'unhcr', 'wpse', 'wtf' ); /* split title string into array of words */ $words = explode( ' ', mb_strtolower( $string ) ); /* iterate over words */ foreach ( $words as $position => $word ) { /* re-capitalize acronyms */ if( in_array( $word, $acronyms_and_such ) ) { $words[$position] = mb_strtoupper( $word ); /* capitalize first letter of all other words, if... */ } elseif ( /* ...first word of the title string... */ 0 === $position || /* ...or not in above lower-case list*/ ! in_array( $word, $articles_conjunctions_prepositions ) ) { $words[$position] = ucwords( $word ); } } /* re-combine word array */ $string = implode( ' ', $words ); /* return title string in title case */ return $string; } 

Offensichtlich könnten beide Wortlisten erweitert werden – die Kleinbuchstabenliste insbesondere durch mehr Präpositionen, die Akronyme durch diejenigen, die häufig auf der aktuellen Seite verwendet werden.

Der WP-spezifische Teil ist sowieso nur der obere Codeblock.

Sie können den Posttitel ändern, wenn er angezeigt wird:

 add_action( 'the_post', 'wpse_94856_title_update' ); function wpse_94856_title_update( $post ) { if ( empty ( $post->post_title ) ) return; $new_title = mb_convert_case( $post->post_title, MB_CASE_TITLE, "UTF-8" ); if ( $post->post_title === $new_title ) return; wp_update_post( array ( 'ID' => $post->ID, 'post_title' => $new_title ) ); // $post is passed by reference, so we update this property in real time $post->post_title = $new_title; } 

Dies ist nur eine Idee, basierend auf dieser Antwort . Nicht getestet .

Eine schnelle “Lösung” wäre via CSS mittels Text-Transformation .

 text-transform: capitalize; 

Es wäre jedoch am besten, wenn Sie die Groß- und Kleinschreibung in der database ändern könnten, da dies eine Frage der Stile und nicht des Inhalts ist. Wenn Sie Titel in Großbuchstaben haben möchten, tun Sie dies über CSS oder Sie haben dieses Problem!