वर्डप्रेस स्लग कैसे उत्पन्न करता है?


17

क्या कोई ऐसा पृष्ठ है जो विवरण देता है कि वास्तव में वर्डप्रेस यूआरएल के लिए स्लग कैसे उत्पन्न करता है? मैं एक स्क्रिप्ट लिख रहा हूं, जो कि वर्डप्रेस जेनरेट के समान URL स्लग उत्पन्न करने की आवश्यकता है।


इस प्रश्न के उत्तर अब पुराने हो गए हैं - इसके बजाय codex.wordpress.org/Function_Reference/wp_unique_post_slug का उपयोग करें ।
सिनिस्टरबर्ड

जवाबों:


16

बल्ले से, मैं आपको एक पेज / ट्यूटोरियल / प्रलेखन नहीं दे सकता कि WP स्लग कैसे उत्पन्न होते हैं, लेकिन sanitize_title()फ़ंक्शन पर एक नज़र डालें ।

फ़ंक्शन नाम से गलत प्रभाव न डालें, इसका अर्थ पृष्ठ / पोस्ट शीर्षक के रूप में आगे के उपयोग के लिए किसी शीर्षक को पवित्र करना नहीं है । यह एक शीर्षक स्ट्रिंग लेता है और इसे URL में उपयोग करने के लिए लौटाता है:

  • स्ट्रिप्स HTML और PHP
  • स्ट्रिप्स विशेष आकर्षण
  • सभी वर्णों को निचले स्तर पर परिवर्तित करता है
  • व्हॉट्सएप, अंडरस्कोर और अवधियों को हाइफ़न / डैश द्वारा प्रतिस्थापित करता है
  • एक के लिए कई लगातार डैश कम कर देता है

ऐसे किनारे मामले हो सकते हैं जहां कोर कुछ अतिरिक्त करता है (आपको यह सत्यापित करने के लिए स्रोत को देखना sanitize_title()होगा कि हमेशा वही उत्पन्न होता है जिसकी आप अपेक्षा करते हैं), लेकिन यह कम से कम 99% को कवर करना चाहिए, यदि सभी मामले नहीं ।


1
@kaiser: मुझे लगा कि आप बस T5 के साथ प्यार कर रहे हैं :) (जो कि बाहर की जाँच करने के लिए मेरे एजेंडे पर है) और आम तौर पर: यदि कोई शीर्षक वास्तव में लंबा है, तो WP स्लग को एक निश्चित अधिकतम लंबाई तक भी चलाता है। यह उन मामलों में से एक है जहां मुझे पूरी तरह से यकीन नहीं है कि क्या यह sanitize_titleफ़ंक्शन में भी लागू फ़िल्टर द्वारा किया गया है , या यह कि फ़ंक्शन चलने के बाद किसी और चीज़ से नियंत्रित किया गया है या नहीं।
जोहान्स पिल्ले

मुझे लगता है कि यह sanitize_title-filter है कि एक को बाहर की जाँच करने की जरूरत है। लेकिन अन्य संबंधित कार्य भी हैं । मुझे वास्तव में इस बारे में कोई जानकारी नहीं थी। कभी-कभी ऐसा लगता SimplePieहै कि WP_Rewriteबात समझने की तुलना में आसान है। Btw: टोस्चो "मंकीमैन रीराइट एनालाइजर" को एकीकृत करने का काम करता है। यहीं से चीजें वास्तव में दिलचस्प होने लगती हैं।
कैसर

1
यदि आप URL-अनुकूल स्लग जनरेट करने के बारे में थोड़ा और स्पष्ट होना चाहते हैं, तो sanitize_title_with_dashes () पर विचार करें।
टॉम ऑगर

5

आप इस फ़ंक्शन का उपयोग कर सकते हैं:

static public function slugify($text)
{
  // replace non letter or digits by -
  $text = preg_replace('~[^\pL\d]+~u', '-', $text);

  // transliterate
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text);

  // trim
  $text = trim($text, '-');

  // remove duplicate -
  $text = preg_replace('~-+~', '-', $text);

  // lowercase
  $text = strtolower($text);

  if (empty($text)) {
    return 'n-a';
  }

  return $text;
}

अपनी तरह का wp url sanitize function काम करता है।


4

आपकी सेवा में कोर

वर्डप्रेस में बनाया गया कोई भी डेवलपर मोड अलग नहीं है WP_DEBUG, जो इस मामले में आपकी बहुत मदद नहीं करता है। मूल रूप से WP "रिवाइटर एपीआई" का उपयोग करता है , जो कि WP_Rewriteक्लास के लिए एक फ़ंक्शन आधारित, निम्न स्तर का आवरण है , जिसके बारे में आप कोडेक्स में पढ़ सकते हैंglobal $wp_rewriteवस्तु आपकी सेवा में खड़ा वर्ग के साथ यह या परस्पर प्रभाव का निरीक्षण करने के।

प्लगइन्स जो इसे देखने में मदद करते हैं।

Toschos "T5 Rewrite" -lugin और Jan Fabrys "Monkeyman Rewrite विश्लेषक" -lugin आपका मार्ग दर्शन करेंगे। मैंने इसे "मंकीमैन रीराइट एनालाइजर" के साथ सुचारू रूप से एकीकृत करने के लिए "टी 5 रीराइट" के लिए एक छोटा सा विस्तार लिखा है, जिसे आप यहां जीथब पर "टी 5 रीराइट" रेपो विकी में पा सकते हैं ।

"मंकीमैन" -प्लगिन एक नया पृष्ठ जोड़ता है, जो टूल के तहत व्यवस्थापक यूआई मेनू में दर्ज किया गया है । "T5 पुनर्लेखन" -plugin के लिए एक नया मदद टैब कहते हैं सेटिंग्स > स्थायी लिंक में पेज। मेरा एक्सटेंशन बताए गए टूल- पेज में सहायता टैब भी जोड़ता है।

यहां "T5 रिवाइराइट" -plugins टैब कंटेंट की तरह दिखने में मदद करने का स्क्रीनशॉट है।

यहां छवि विवरण दर्ज करें

Vorlage = पैटर्न | बेस्चेरीबंग = व्याख्या | बेसिकली = उदाहरण

टिप्पणियाँ

"T5 रिवाइराइट" -plugin एक अद्भुत काम करता है जिसकी मदद से आप पुनर्लेखन वस्तु का निरीक्षण कर सकते हैं। और यह और भी अधिक है: यह नई संभावनाओं को जोड़ता है। इसलिए यह मेरे मूल प्लगइन्स पैकेज का कम से कम (मेरी स्थापनाओं में) हिस्सा है।


2

वास्तव में, यदि आप कोर फ़ंक्शन wp_insert_post (पोस्ट.php) देखते हैं, तो आप देखेंगे कि यह निम्न कार्य करता है:

$data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent );

$wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );

ध्यान देने योग्य बात यह है कि wp_unique_post_slug और sanitize_title दोनों का उपयोग करता है:

wp_unique_post_slug( sanitize_title( 

0

एक पुराने प्रश्न को फिर से शुरू करने के लिए क्षमा करें, लेकिन मुझे इसकी आवश्यकता समान थी क्योंकि यह विधि मेरे लिए पूरी तरह से काम करती है:

$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now

यह विधि एक दोहरे स्वच्छताकरण का उपयोग करती है।

पहले वाला saveमोड का उपयोग करता है, जहां HTML और PHP टैग छीन लिए जाते हैं, और उच्चारण हटा दिए जाते हैं (उच्चारण वर्णों को गैर-उच्चारण समकक्षों के साथ बदल दिया जाता है)।

दूसरा queryमोड सुनिश्चित करता है कि सभी रिक्त स्थान डैश -और अन्य विराम चिह्न हटा दिए गए हैं।

आशा है कि यह किसी की मदद करता है! :)

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