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


13

我正在用他的WordPress网站来帮助我的父亲。
它有1,700多个帖子,大写字母。

我们想在数据库中将它们更改为“ Title Case”(可能使用此PHP脚本)。

WordPress的“ To Title Case”插件可在模板级别更改大小写-我们想在数据库级别更改大小写。

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


1
我会从头开始编写Loop表单。它应该很简单,但是如果您想重复使用插件的代码,请发布相关部分。
s_ha_dum 2013年

我假设标题是用大写字母手动添加的?
布拉德·道尔顿2014年

@BradDalton-是的,他养成了在大写字母中输入文章/博客标题的习惯。
BaronGrivet

您找到解决方案了吗?
布拉德·道尔顿2014年

@BradDalton-是的,我在“更新帖子”下面选择的解决方案
BaronGrivet 2014年

Answers:


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天。是的,这是个
陷阱

“更新帖子”部分如何代替我的模板文件<?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

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

text-transform: capitalize;

但是,最好是更改数据库的大写字母,因为这是样式问题,而不是内容问题:)如果要以大写形式显示标题,请通过CSS进行操作,否则将遇到此类问题!


1
这只能大写小写字母,不能大写。
皮特

0

这适用于按标题引用的单个标题

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

strtolower将标题变为小写。然后ucword使它成为适当的情况

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.