I have more than 7500 products in woocommerce with TITLES IN UPPERCASE.

I'd like to change these to "Sentence case"

What would be the best way to apply the script to all titles in the WordPress database?

  • This may not have been done in Database at all, check in your WordPress Editor, if the titles there are not in ALL UPPERCASE, then it was done in CSS, in which case, it can be changed very easily. – Fayaz Feb 12 '17 at 9:08
  • All title where written in upper case, and there are more then 7500 products with upper case title. Anyway Inresolved the problem with the plugin friendly case – Bursuc Andrei Feb 12 '17 at 9:09

You can do that with a command in your database:

UPDATE `wp_posts` /* Adjust the prefix! */
SET `post_title` = CONCAT(
    UCASE( /* First letter uppercase */
            `post_title`, 1, 1
    LCASE( /* The rest in lowercase */
            `post_title`, 2, LENGTH(`post_title`)

If your author has a habit of posting uppercase titles, you can add a filter per plugin to change titles whenever a new post is added:

add_filter( 'wp_insert_post_data', function( array $data ) {

    // list of words not to change
    $protected_words = [

    if ( empty( $data['post_title'] ) )
        return $data;

    $words = explode( ' ', $data['post_title'] );

    $words = array_map( function( $word ) use ( $protected_words ) {
        return in_array( $word, $protected_words )
            ? $word
            : mb_strtolower( $word, 'UTF-8' );
    }, $words );

    // There is no mb_ucfirst()
    $words[0] = mb_convert_case( $words[0], MB_CASE_TITLE, "UTF-8");

    $data['post_title'] = join( ' ', $words );

    return $data;
|improve this answer|||||
  • Nice workaround. PS: just a general reminder to SQL testers: Remember to take a database backup before testing.. – birgire Feb 12 '17 at 10:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.