सभी शीर्षक शीर्षक के मामले को "शीर्षक प्रकरण" में कैसे बदला जाए


13

मैं अपने वर्डप्रेस वेबसाइट के साथ अपने पिता की मदद कर रहा हूं।
इसमें TITLES IN UPPERCASE के साथ 1,700 से अधिक पद हैं।

हम इन्हें डेटाबेस में "टाइटल केस" में बदलना चाहेंगे (संभवतः इस PHP स्क्रिप्ट का उपयोग करके )।

वर्डप्रेस "टू टाइटल केस" प्लग-इन केस को टेम्पलेट स्तर पर बदलता है - हम इसे डेटाबेस स्तर पर बदलना चाहेंगे।

WordPress डेटाबेस में सभी शीर्षकों पर स्क्रिप्ट को लागू करने का सबसे अच्छा तरीका क्या होगा?
मैं स्क्रैच से कुछ कोड लिख सकता हूं, लेकिन मैं अनुमान लगा रहा हूं कि मौजूदा कोड / विधियां हैं जो सभी शीर्षकों में एक फ़ंक्शन / विधि लागू कर सकते हैं।


1
मैं एक लूप फॉर्म खरोंच लिखूंगा। यह बहुत सरल होना चाहिए, लेकिन यदि आप प्लगइन के कोड का पुन: उपयोग करना चाहते हैं तो संबंधित भागों को पोस्ट करें।
s_ha_dum

मैं उन उपाधियों को ग्रहण करता हूँ जहाँ अपरकेस में मैन्युअल रूप से जोड़ा जाता है?
ब्रैड डॉल्टन

@ ब्रैडाल्टन - यह सही है, उन्हें अपने लेख / ब्लॉग शीर्षक में टाइप करने की आदत है।
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
साथ वर्डप्रेस, MySQL और OpenOffice एक शीर्षक : डी
FUXIA

: D केवल इस 2day को देखा। हां, यह एक गोचर है ...
जोहान्स पिल

के स्थान पर मेरी टेम्पलेट फ़ाइल में "पदों को अपडेट करना" भाग कैसे फिट होता है <?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

एक त्वरित "समाधान" पाठ-परिवर्तन का उपयोग करके सीएसएस के माध्यम से होगा ।

text-transform: capitalize;

हालाँकि, यह सबसे अच्छा होगा यदि आप डेटाबेस पर कैपिटलाइज़ेशन को बदल सकते हैं क्योंकि यह शैलियों का विषय है, सामग्री नहीं :) यदि आप अपरकेस में शीर्षक चाहते हैं, तो CSS के माध्यम से ऐसा करें या आपको इस तरह की समस्या होगी!


1
यह केवल लोअरकेस शब्दों को कैपिटलाइज़ कर सकता है, न कि वे शब्द जो पहले से कैपिटल में हैं।
पीट

0

यह शीर्षक संदर्भ आधार द्वारा एक व्यक्तिगत शीर्षक पर काम करता है

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

स्ट्रेटोवर शीर्षक को लोअरकेस में बदल देता है। फिर ucwords इसे उचित स्थिति बनाता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.