Tüm yayın başlıklarının durumu “Başlık Durumu” olarak nasıl değiştirilir?


13

Babama WordPress web sitesinde yardım ediyorum.
TITLES IN UPPERCASE ile 1.700'den fazla gönderi bulunuyor.

Bunları veritabanında "Başlık Durumu" olarak değiştirmek istiyoruz (muhtemelen bu PHP betiğini kullanıyor ).

WordPress "Başlığa Büyük Harf" eklentisi, vakayı şablon düzeyinde değiştirir - bunu veritabanı düzeyinde değiştirmek isteriz.

Komut dosyasını WordPress veritabanındaki tüm başlıklara uygulamanın en iyi yolu nedir?
Sıfırdan bazı kod yazabilirim ama orada tüm kodlar arasında bir işlev / yöntem uygulayabilecek mevcut kod / yöntem var sanırım.


1
Bir Döngü formu çizik yazardım. Oldukça basit olmalı, ancak eklentinin kodunu yeniden kullanmak istiyorsanız ilgili parçaları gönderin.
s_ha_dum

Büyük harflerle manuel olarak eklenen yerlerin başlıklarını varsayalım?
Brad Dalton

@BradDalton - bu doğru, UPPERCASE'te makale / blog başlıklarını yazmayı alışkanlık haline getirdi.
BaronGrivet

Bunun için henüz bir çözüm buldunuz mu?
Brad Dalton

@BradDalton - evet, "Mesajların güncellenmesi" altında seçtiğim çözüm
BaronGrivet

Yanıtlar:


19

Yayınları güncelleme

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

Bir dizgiyi "Başlık Vakası" na dönüştürme

Ve WP ile ilgili olmasa da, bütünlük uğruna:

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

Açıkçası, her iki kelime listesi de genişletilebilir - küçük harf listesi özellikle daha fazla edat tarafından, mevcut sitede sık kullanılanların kısaltmalarıdır.

Yine de WP'ye özgü kısım sadece üst kod bloğudur.


1
WordPress, MySQL ve OpenOffice ile başlık : D
fuxia

: D Bunu sadece 2 gün gördüm. Evet, bu bir ...
Johannes Pille

"Yayınları güncelleme" bölümü yerine şablon dosyama nasıl uyuyor <?php the_title(); >?
Pete

9

Yayın başlığını görüntülendiğinde değiştirebilirsiniz:

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

Bu sadece bu cevaba dayanan bir fikirdir . Test edilmedi .


Benim için iyi çalışıyor.
Pete

0

Hızlı bir "çözüm", metin dönüşümü kullanan CSS aracılığıyla olacaktır .

text-transform: capitalize;

Ancak, bu içerik değil, bir stil meselesi olduğu için veritabanındaki büyük harf kullanımını değiştirebilirseniz en iyisi olur :) Büyük harfli başlıklar istiyorsanız, bunu CSS aracılığıyla yapın veya bu tür bir sorun yaşarsınız!


1
Bu, yalnızca büyük harfle yazılan sözcükleri değil, yalnızca küçük harfleri büyük harfe çevirebilir.
Pete

0

Bu, başlık referansı temelinde bireysel bir başlık üzerinde çalışır

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

strtolower başlığı küçük harfe dönüştürür. Sonra ucwords uygun bir durum yapar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.