Cómo cambiar el caso de todos los títulos de publicaciones a "Título de caso"

11

Estoy ayudando a mi padre con su sitio web de WordPress.
Cuenta con más de 1,700 mensajes con títulos en mayúsculas.

Nos gustaría cambiar estos a "Título de caso" en la base de datos (posiblemente utilizando esta secuencia de comandos PHP ).

El complemento de WordPress "To Title Case" cambia el caso en el nivel de la plantilla, nos gustaría cambiarlo en el nivel de la base de datos.

¿Cuál sería la mejor manera de aplicar el script a todos los títulos en la base de datos de WordPress?
Podría escribir algo de código desde cero, pero supongo que hay códigos / métodos existentes que pueden aplicar una función / método en todos los títulos.

    
pregunta BaronGrivet 07.04.2013 - 01:04

4 respuestas

16

Actualizando las publicaciones

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

Convertir una cadena a "Título de caso"

Y, aunque no es pertinente para WP, por el bien de la integridad:

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

Obviamente, ambas listas de palabras podrían expandirse: la lista en minúsculas, especialmente por más preposiciones, las siglas por aquellos que se usan a menudo en el sitio actual.

La parte específica de WP es solo el bloque de código superior, sin embargo, de todos modos.

    
respondido por el Johannes Pille 07.04.2013 - 01:34
6

Puede cambiar el título de la publicación cuando se visualiza:

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

Esto es solo una idea, basada en esta respuesta . No probado .

    
respondido por el fuxia 07.04.2013 - 01:33
0

Una "solución" rápida sería a través de CSS utilizando text-transform .

text-transform: capitalize;

Sin embargo, sería mejor si pudiera cambiar el uso de mayúsculas en la base de datos, ya que se trata de estilos, no de contenido :) Si desea títulos en mayúsculas, hágalo a través de CSS o tendrá este tipo de problema !

    
respondido por el Nahuel 11.04.2013 - 21:29
0

Esto funciona en una base de referencia de título por título individual

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

strtolower convierte el título en minúsculas. Entonces los ucwords lo convierten en un caso apropiado

    
respondido por el Jon 06.03.2018 - 13:38

Lea otras preguntas en las etiquetas