วิธีเปลี่ยนกรณีของชื่อเรื่องทั้งหมดเป็น“ ชื่อเรื่อง”


13

ฉันช่วยพ่อกับเว็บไซต์ WordPress ของเขา
มีโพสต์มากกว่า 1,700 โพสต์พร้อมชื่อในแง่ดี

เราต้องการเปลี่ยนเป็น "ชื่อตัวพิมพ์" ในฐานข้อมูล (อาจใช้สคริปต์ PHP นี้ )

ปลั๊กอิน WordPress "เป็นชื่อกรณี" จะเปลี่ยนเคสในระดับเทมเพลต - เราต้องการเปลี่ยนในระดับฐานข้อมูล

อะไรจะเป็นวิธีที่ดีที่สุดในการใช้สคริปต์กับชื่อเรื่องทั้งหมดในฐานข้อมูล WordPress
ฉันสามารถเขียนโค้ดตั้งแต่ต้นได้ แต่ฉันเดาว่ามีโค้ด / วิธีการที่มีอยู่ที่สามารถใช้ฟังก์ชั่น / วิธีในทุกหัวเรื่อง


1
ฉันจะเขียนแบบฟอร์มการวนลูป มันควรจะค่อนข้างง่าย แต่ถ้าคุณต้องการใช้รหัสของปลั๊กอินอีกครั้งให้โพสต์ส่วนที่เกี่ยวข้อง
s_ha_dum

ฉันถือว่าชื่อที่เพิ่มด้วยตนเองในตัวพิมพ์ใหญ่?
แบรดดัลตัน

@BradDalton - ถูกต้องเขามีนิสัยชอบพิมพ์บทความ / บล็อกใน UPPERCASE
BaronGrivet

คุณพบวิธีแก้ปัญหาสำหรับเรื่องนี้หรือยัง?
แบรดดัลตัน

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

การแปลงสตริงเป็น "Case Title"

และในขณะที่ไม่เกี่ยวข้องกับ 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 วันนี้เท่านั้น อ๋อนั่นคือ gotcha ...
Johannes 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

A "แก้ปัญหา" รวดเร็วจะผ่านทาง 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.