如何将所有职位标题的大小写更改为“标题大小写”

时间:2013-04-06 作者:BaronGrivet

我正在帮助我父亲建立WordPress网站
它有1700多篇标题为大写的帖子。

我们希望在数据库中将这些更改为“Title Case”(可能使用this PHP script).

WordPress“To Title Case”插件在模板级别更改案例-我们希望在数据库级别更改它。

将脚本应用于WordPress数据库中的所有标题的最佳方式是什么
我可以从头开始编写一些代码,但我猜现有的代码/方法可以在所有标题中应用函数/方法。

5 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

更新帖子

$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的部分只是上面的代码块。

SO网友:fuxia

您可以在查看帖子时更改帖子标题:

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;
}
这只是一个想法,基于this answer. 未测试。

SO网友:Nahuel

一个快速的“解决方案”是通过CSS使用text-transform.

text-transform: capitalize;
然而,如果您可以更改数据库的大小写,那将是最好的,因为这是一个样式问题,而不是内容:)如果您想要大写的标题,请通过CSS这样做,否则您将遇到这种问题!

SO网友:Jon

这是在一个标题一个标题参考的基础上进行的

 <?php print  ucwords(strtolower(get_the_title())); ?>
strtolower将标题转换为小写。那么ucwords就成了恰当的案例

SO网友:Michael Parisi

我创建了一个开源的免费插件,它提供了规则和其他东西的例外。我这样做的原因是为了在进口和像你这样的情况下使用。它会更改管理部分和数据库中的标题,这意味着它将处理所有未在标题上使用文本转换的主题。它可以做上、下和混合。它目前不做句子格。请查看我的ProperProgramming链接以查看其工作原理的屏幕截图。超级简单,你可以分块完成。该插件还为小写和大写单词提供了可配置的例外。因此,它将使用首字母缩略词。

https://properprogramming.com/tools/wp-change-titles-case/

或者直接在WordPress上

https://wordpress.org/plugins/change-titles-case/

结束