私は私の父を彼のWordPressウェブサイトで手伝っています。
タイトルが大文字の1,700を超える投稿があります。
データベースでこれらを "Title Case"に変更します(おそらく this PHP script を使用します)。
WordPressの "To Title Case"プラグインはテンプレートレベルで大文字小文字を変更します - データベースレベルで変更したいのですが。
WordPressデータベースのすべてのタイトルにスクリプトを適用するための最善の方法は何でしょうか。
ゼロからコードを書くこともできますが、すべてのタイトルに渡って関数/メソッドを適用できる既存のコード/メソッドがあると思います。
$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固有の部分は、上位のコードブロックだけです。
表示されている投稿のタイトルを変更できます。
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;
}
これは、 この答え に基づいた単なるアイデアです。 テストされていません 。
手っ取り早い「解決策」は、 text-transform を使用してCSSを経由することです。
text-transform: capitalize;
ただし、これは内容ではなくスタイルの問題であるため、データベースの大文字と小文字を変更することをお勧めします。タイトルを大文字で表示する場合は、CSSを使用して変更してください。
これは、タイトル参照ごとに個々のタイトルで機能します。
<?php print ucwords(strtolower(get_the_title())); ?>
strtolowerはタイトルを小文字にします。それからucwordsはそれを適切な場合にします