Bagaimana mengubah kasing semua judul tulisan menjadi “Kasing Judul”

13

Saya membantu ayah saya dengan situs web WordPress-nya.
Ini memiliki lebih dari 1.700 posting dengan TITLES IN UPPERCASE.

Kami ingin mengubahnya menjadi "Judul Kasus" di database (mungkin menggunakan skrip PHP ini ).

Plug-in WordPress "Ke Judul Kasus" mengubah kasing pada tingkat templat - kami ingin mengubahnya di tingkat basis data.

Apa cara terbaik untuk menerapkan skrip ke semua judul di basis data WordPress?
Saya bisa menulis beberapa kode dari awal tapi saya kira ada kode / metode di luar sana yang dapat menerapkan fungsi / metode di semua judul.

BaronGrivet
sumber
1
Saya akan menulis goresan formulir Loop. Seharusnya sangat sederhana, tetapi jika Anda ingin menggunakan kembali kode plugin kemudian posting bagian yang relevan.
s_ha_dum
Saya menganggap judul mana yang ditambahkan secara manual dalam huruf besar?
Brad Dalton
@BradDalton - benar, ia terbiasa mengetik artikel / judul blognya di UPPERCASE.
BaronGrivet
Sudahkah Anda menemukan solusi untuk ini?
Brad Dalton
@BradDalton - ya, solusi yang saya pilih di bawah ini "Memperbarui posting"
BaronGrivet

Jawaban:

19

Memperbarui posting

$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
    ));
}

Mengubah string menjadi "Judul Kasus"

Dan, sementara tidak berkaitan dengan WP, demi kelengkapan:

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

Jelas, kedua daftar kata dapat diperluas - daftar huruf kecil terutama dengan lebih banyak preposisi, akronim oleh yang sering digunakan di situs saat ini.

Namun bagian khusus WP hanyalah blok kode bagian atas.

Johannes Pille
sumber
1
Judul dengan WordPress, MySQL dan OpenOffice : D
fuxia
: D Hanya melihat 2 hari ini. Yap, itu gotcha ...
Johannes Pille
Bagaimana bagian "Memperbarui posting" cocok dengan file template saya <?php the_title(); >?
Pete
9

Anda dapat mengubah judul posting ketika dilihat:

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

Ini hanya sebuah ide, berdasarkan jawaban ini . Tidak diuji .

fuxia
sumber
Bekerja dengan baik untuk saya.
Pete
0

"Solusi" cepat akan melalui CSS menggunakan transformasi teks .

text-transform: capitalize;

Namun, akan lebih baik jika Anda dapat mengubah kapitalisasi pada database karena ini adalah masalah gaya, bukan konten :) Jika Anda ingin judul dalam huruf besar, lakukan melalui CSS atau Anda akan memiliki masalah seperti ini!

Nahuel
sumber
1
Ini hanya dapat menggunakan huruf besar dengan huruf kecil, bukan kata-kata yang sudah menggunakan huruf besar.
Pete
0

Ini berfungsi pada judul individu berdasarkan referensi judul

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

strtolower mengubah judul menjadi huruf kecil. Kemudian ucwords membuatnya menjadi kasus yang tepat

Jon
sumber