Cách thay đổi trường hợp của tất cả các tiêu đề bài đăng thành Trường hợp Tiêu đề


13

Tôi đang giúp cha tôi với trang web WordPress của mình.
Nó có hơn 1.700 bài viết với TITLES IN UPPERCASE.

Chúng tôi muốn thay đổi chúng thành "Trường hợp tiêu đề" trong cơ sở dữ liệu (có thể sử dụng tập lệnh PHP này ).

Plugin "To Title Case" của WordPress thay đổi trường hợp ở cấp độ mẫu - chúng tôi muốn thay đổi nó ở cấp cơ sở dữ liệu.

Điều gì sẽ là cách tốt nhất để áp dụng tập lệnh cho tất cả các tiêu đề trong cơ sở dữ liệu WordPress?
Tôi có thể viết một số mã từ đầu nhưng tôi đoán có mã / phương thức hiện có ngoài đó có thể áp dụng một hàm / phương thức trên tất cả các tiêu đề.


1
Tôi sẽ viết một mẫu vòng lặp. Việc này khá đơn giản, nhưng nếu bạn muốn sử dụng lại mã của plugin thì hãy đăng các phần có liên quan.
s_ha_dum

Tôi giả sử các tiêu đề được thêm bằng tay trong chữ hoa?
Brad Dalton

@BradDalton - đúng vậy, anh ấy có thói quen gõ tiêu đề bài viết / blog của mình trong UPPERCASE.
BaronGrivet

Bạn đã tìm thấy một giải pháp cho điều này chưa?
Brad Dalton

@BradDalton - vâng, giải pháp tôi đã chọn bên dưới "Cập nhật bài viết"
BaronGrivet

Câu trả lời:


19

Cập nhật bài viết

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

Chuyển đổi một chuỗi thành "Trường hợp tiêu đề"

Và, mặc dù không phù hợp với WP, vì mục đích hoàn chỉnh:

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

Rõ ràng, cả hai danh sách các từ có thể được mở rộng - danh sách chữ thường, đặc biệt là bởi nhiều giới từ, từ viết tắt của những từ được sử dụng thường xuyên trên trang web hiện tại.

Dù sao đi nữa, phần dành riêng cho WP chỉ là khối mã phía trên.


1
Một tiêu đề với WordPress, MySQL và OpenOffice : D
fuxia

: D Chỉ thấy 2 ngày này. Đúng, đó là một vấn đề ...
Julian Pille

Làm thế nào để phần "Cập nhật bài viết" phù hợp với tệp mẫu của tôi thay cho <?php the_title(); >?
Pete

9

Bạn có thể thay đổi tiêu đề bài viết khi nó được xem:

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

Đây chỉ là một ý tưởng, dựa trên câu trả lời này . Không được kiểm tra .


Hoạt động tốt cho tôi.
Pete

0

Một "giải pháp" nhanh chóng sẽ thông qua CSS bằng cách sử dụng chuyển đổi văn bản .

text-transform: capitalize;

Tuy nhiên, sẽ là tốt nhất nếu bạn có thể thay đổi cách viết hoa trên cơ sở dữ liệu vì đây là vấn đề về kiểu dáng, không phải nội dung :) Nếu bạn muốn tiêu đề bằng chữ in hoa, hãy làm như vậy thông qua CSS hoặc bạn sẽ gặp vấn đề như vậy!


1
Điều này chỉ có thể viết hoa các từ viết thường, không phải các từ đã được viết hoa.
Pete

0

Điều này hoạt động trên một tiêu đề cá nhân theo cơ sở tham chiếu tiêu đề

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

strtolower biến tiêu đề thành chữ thường. Sau đó, ucwords làm cho nó đúng trường hợp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.