So ändern Sie die Groß- und Kleinschreibung aller Post-Titel in "Groß- und Kleinschreibung"

13

Ich helfe meinem Vater mit seiner WordPress-Website.
Es hat über 1.700 Beiträge mit TITLES IN UPPERCASE.

Wir möchten diese in der Datenbank in "Titel Groß- / Kleinschreibung" ändern (möglicherweise mit diesem PHP-Skript ).

Das WordPress-Plug-In "To Title Case" ändert die Groß- / Kleinschreibung auf Vorlagenebene - wir möchten sie auf Datenbankebene ändern.

Was wäre der beste Weg, um das Skript auf alle Titel in der WordPress-Datenbank anzuwenden?
Ich könnte einen Code von Grund auf neu schreiben, aber ich vermute, dass es bereits Code / Methoden gibt, die eine Funktion / Methode für alle Titel anwenden können.

BaronGrivet
quelle
1
Ich würde einen Loop Form Scratch schreiben. Es sollte ziemlich einfach sein, aber wenn Sie den Code des Plugins wiederverwenden möchten, posten Sie die relevanten Teile.
s_ha_dum
Ich gehe davon aus, dass die Titel manuell in Großbuchstaben hinzugefügt wurden.
Brad Dalton
@BradDalton - das ist richtig, er hat sich angewöhnt, seine Artikel- / Blog-Titel in GROSSBUCHSTABEN einzutippen.
BaronGrivet
Haben Sie dafür schon eine Lösung gefunden?
Brad Dalton
@BradDalton - ja, die Lösung, die ich unten ausgewählt habe "Aktualisieren der Beiträge"
BaronGrivet

Antworten:

19

Aktualisieren der Beiträge

$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 eines Strings in "Groß- / Kleinschreibung"

Und, obwohl dies 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 die, die auf der aktuellen Site häufig verwendet werden.

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

Johannes Pille
quelle
1
Ein Titel mit WordPress, MySQL und OpenOffice : D
fuxia
: D Nur diesen 2 Tag gesehen. Ja, das ist ein Schnäppchen ...
Johannes Pille
Wie passt der Teil "Aktualisieren der Beiträge" in meine Vorlagendatei anstelle von <?php the_title(); >?
Pete
9

Sie können den Post-Titel ä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 .

fuxia
quelle
Funktioniert gut für mich.
Pete
0

Eine schnelle "Lösung" wäre über CSS mit Text-Transformation .

text-transform: capitalize;

Es ist jedoch am besten, wenn Sie die Groß- und Kleinschreibung in der Datenbank ändern, da dies eine Frage der Formatvorlagen und nicht des Inhalts ist.

Nahuel
quelle
1
Dies kann nur Wörter in Kleinbuchstaben schreiben, nicht Wörter, die bereits groß geschrieben sind.
Pete
0

Dies funktioniert auf der Basis einzelner Titel und Titelverweise

 <?php print  ucwords(strtolower(get_the_title())); ?>

strtolower wandelt den Titel in Kleinbuchstaben um. Dann macht das ucwords es richtig

Jon
quelle