모든 게시물 제목의 사례를 "제목 사례"로 변경하는 방법


13

나는 그의 아버지의 워드 프레스 웹 사이트를 돕고 있습니다.
TITLES IN UPPERCASE에 1,700 개가 넘는 게시물이 있습니다.

데이터베이스 에서이 제목을 "Title Case"로 변경하고 싶습니다 ( 이 PHP 스크립트 사용 가능 )

WordPress "To Title Case"플러그인은 템플리트 레벨에서 케이스를 변경합니다. 데이터베이스 레벨에서 케이스를 변경하려고합니다.

WordPress 데이터베이스의 모든 제목에 스크립트를 적용하는 가장 좋은 방법은 무엇입니까?
코드를 처음부터 작성할 수는 있지만 모든 제목에 함수 / 메소드를 적용 할 수있는 기존 코드 / 메소드가 있다고 생각합니다.


1
루프 양식 스크래치를 작성합니다. 매우 간단해야하지만 플러그인 코드를 재사용하려면 관련 부분을 게시하십시오.
s_ha_dum

제목을 대문자로 수동으로 추가 한 것으로 가정합니까?
Brad Dalton

@BradDalton-맞습니다. 그의 기사 / 블로그 제목을 대문자로 입력하는 습관이 들었습니다.
BaronGrivet

아직 해결책이 없습니까?
Brad Dalton

@BradDalton-예, 아래에서 선택한 솔루션 "게시물 업데이트"
BaronGrivet

답변:


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 이틀 만 보았습니다. 네, 그건 잡았다 ...의
요하네스 Pille

"게시물 업데이트"부분이 대신 템플릿 파일에 어떻게 맞 <?php the_title(); >습니까?
Pete

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

이것은 이 답변을 기반으로 한 아이디어 일뿐 입니다. 테스트되지 않았습니다 .


나를 위해 잘 작동합니다.
Pete

0

빠른 "솔루션"은 text-transform을 사용하는 CSS를 통해 이루어 집니다.

text-transform: capitalize;

그러나 내용이 아닌 스타일의 문제이기 때문에 데이터베이스에서 대문자를 변경할 수 있다면 가장 좋습니다. 제목을 대문자로 사용하려면 CSS를 통해 변경하십시오. 그렇지 않으면 이런 종류의 문제가 발생합니다!


1
이미 대문자로 된 단어가 아니라 소문자 만 대문자로 사용할 수 있습니다.
Pete

0

타이틀 기준으로 개별 타이틀에서 작동합니다.

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

strtolower는 제목을 소문자로 바꿉니다. 그런 다음 ucwords는 적절한 경우를 만듭니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.