すべての投稿タイトルの大文字と小文字を「タイトルケース」に変更する方法


13

私は父のWordPressウェブサイトを手伝っています。
TITLES IN UPPERCASEの投稿が1,700以上あります。

データベースでこれらを「タイトルケース」に変更します(このPHPスクリプトを使用する可能性があります)。

WordPressの「タイトルケースへ」プラグインは、テンプレートレベルでケースを変更します。データベースレベルで変更したいと思います。

WordPressデータベースのすべてのタイトルにスクリプトを適用する最良の方法は何ですか?
ゼロからコードを書くこともできますが、すべてのタイトルに関数/メソッドを適用できる既存のコード/メソッドがあると思います。


1
ループフォームスクラッチを作成します。かなりシンプルなはずですが、プラグインのコードを再利用したい場合は、関連する部分を投稿してください。
s_ha_dum

手動で大文字で追加されたタイトルを想定していますか?
ブラッドダルトン

@BradDalton-それは正しい、彼は彼の記事/ブログのタイトルを大文字で入力する習慣になった。
BaronGrivet 14

これに対する解決策はまだ見つかりましたか?
ブラッドダルトン14

@BradDalton -私は「ポストを更新する」の下に選択はい、解決策
BaronGrivet

回答:


19

投稿を更新する

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

文字列を「タイトルケース」に変換する

そして、完全性のために、WPには関係ありませんが:

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

明らかに、両方の単語のリストを展開できます-特により多くの前置詞による小文字のリスト、現在のサイトで頻繁に使用されるものの頭字語。

とにかく、WP固有の部分は上位コードブロックのみです。


1
WordPress、MySQL、OpenOfficeのタイトル:D
fuxia

:Dこの2日だけ見ました。うん、知っておかなけれです...
ヨハネスPille

代わりにテンプレートファイルに「投稿の更新」部分はどのように収まります<?php the_title(); >か?
ピート

9

表示されているときに投稿のタイトルを変更できます。

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

これは、この答えに基づいた単なるアイデアです。テストされていません


私にとってはうまくいきます。
ピート

0

簡単な「解決策」は、text-transformを使用するCSSを使用することです。

text-transform: capitalize;

ただし、コンテンツではなくスタイルの問題であるため、データベースの大文字を変更できれば最高です。タイトルを大文字にする場合は、CSSを使用してください。


1
これは小文字の単語のみを大文字にすることができ、既に大文字になっている単語は大文字にできません。
ピート

0

これは、タイトルごとに個別のタイトルで機能します

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

strtolowerは、タイトルを小文字に変換します。次に、ucwordsが適切なケースにします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.