कभी न कभी, हर बढ़ती WordPress साइट "Posts" और "Pages" से आगे निकल जाती है। आप किसी रेस्टोरेंट के लिए साइट बना रहे हैं और आपको Menu Items चाहिए। किसी प्रॉपर्टी एजेंट को Listings चाहिए। किसी ट्रेनिंग कंपनी को Courses चाहिए। आप इन्हें कैटेगरी के साथ ब्लॉग पोस्ट में ठूँस सकते हैं, और बहुत लोग ऐसा करते हैं, लेकिन यह कभी ठीक नहीं लगता: मेन्यू भर जाते हैं, फ़ील्ड फ़िट नहीं होते, और आपका क्लाइंट ग़लती से कोई कोर्स ब्लॉग फ़ीड में प्रकाशित करता रहता है।
कस्टम पोस्ट टाइप इसका WordPress वाला जवाब हैं। ये आपको अपने एडमिन मेन्यू, अपने URL और अपने टेम्पलेट वाला नया तरह का कंटेंट बनाने देते हैं। प्लगइन इन्हें बना सकते हैं, लेकिन कोड छोटा है और उसे समझना फ़ायदेमंद है। यह गाइड बताती है कि कस्टम पोस्ट टाइप कब सही विकल्प है, उसे सही तरह कैसे रजिस्टर करें, और उसके बाद आने वाले टेम्पलेट, टैक्सोनॉमी और ग़लतियाँ।
कस्टम पोस्ट टाइप कब सही विकल्प है
कस्टम पोस्ट टाइप तब इस्तेमाल करें जब कंटेंट:
- का अपना ढाँचा हो, जैसे क़ीमत वाला प्रोडक्ट या तारीख़ वाला इवेंट।
- ब्लॉग से अलग दिखाया जाना चाहिए, अपने आर्काइव पेज के साथ।
- अलग तरह से संभाला जाता हो, अक्सर अलग लोगों द्वारा।
- पोस्ट या पेज में मिलाने पर उन्हें अव्यवस्थित कर दे।
अगर आपको सिर्फ़ ब्लॉग पोस्ट को समूहों में रखना है, तो आम तौर पर कैटेगरी या टैग काफ़ी है। अगर आपको एक ख़ास पेज चाहिए, तो सामान्य पेज ठीक है। कस्टम पोस्ट टाइप तब चमकते हैं जब आपके पास एक ही तरह के कई आइटम हों।
पोस्ट टाइप रजिस्टर करना
सब कुछ एक फ़ंक्शन, register_post_type(), से होता है, जिसे init हुक पर कॉल किया जाता है:
function acme_register_book_post_type() {
register_post_type( 'book', array(
'labels' => array(
'name' => __( 'Books', 'acme' ),
'singular_name' => __( 'Book', 'acme' ),
'add_new_item' => __( 'Add New Book', 'acme' ),
'edit_item' => __( 'Edit Book', 'acme' ),
),
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'menu_icon' => 'dashicons-book',
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
'rewrite' => array( 'slug' => 'books' ),
) );
}
add_action( 'init', 'acme_register_book_post_type' );यह एक पूरा, चालू पोस्ट टाइप है। ज़रूरी सेटिंग को एक-एक करके समझना फ़ायदेमंद है।
की (key)
book पोस्ट टाइप की की है, जो कोड और क्वेरी में इस्तेमाल होती है। यह 20 या उससे कम अक्षरों की, छोटे अक्षरों (lowercase) में होनी चाहिए, और इतनी ख़ास होनी चाहिए कि दूसरे प्लगइन से न टकराए; बहुत सारे प्लगइन वाली साइट पर book से acme_book ज़्यादा सुरक्षित है। post, page, attachment और order जैसे कुछ नाम WordPress ने आरक्षित रखे हैं और उन्हें कभी इस्तेमाल नहीं करना चाहिए।
public, has_archive और rewrite
public कंटेंट को उसके अपने URL के साथ फ़्रंट एंड पर दिखाता है। has_archive एक लिस्टिंग पेज बनाता है, और rewrite URL का आधार तय करता है, इसलिए किताबें /books/book-title/ पर और आर्काइव /books/ पर रहता है।
show_in_rest
यह बहुत लोगों को उलझा देता है। show_in_rest => true के बिना आपका पोस्ट टाइप ब्लॉक एडिटर की जगह पुराना क्लासिक एडिटर इस्तेमाल करता है, और REST API में उपलब्ध नहीं होता। जब तक कोई वजह न हो, इसे चालू रखें।
supports
तय करता है कि कौन से एडिटिंग फ़ीचर दिखें: टाइटल, एडिटर, फ़ीचर्ड इमेज (thumbnail), एक्सर्प्ट, कस्टम फ़ील्ड, कमेंट, रिविज़न और पेज एट्रिब्यूट। सिर्फ़ वही शामिल करें जिनकी एडिटर को ज़रूरत है।
बिना बॉयलरप्लेट के लिखना
लेबल का पूरा सेट बीस लाइनों का होता है, और उनमें से किसी एक में टाइपो करना आसान है। WordPress CPT Generator फ़ॉर्म भरते-भरते पूरा कोड लिखता है, टाइप करते ही लाइव अपडेट होता है। यह आपके लेबल से की और URL स्लग भर देता है, लेबल को सुरक्षित रूप से एस्केप करता है ताकि "Doctor's Notes" जैसे नाम PHP न तोड़ें, और बहुत लंबी या आरक्षित की के बारे में तुरंत चेतावनी देता है। यह उसी फ़ाइल में मेल खाती टैक्सोनॉमी भी बना सकता है।
404 का जाल
आप कोड जोड़ते हैं, अपनी पहली किताब बनाते हैं, View पर क्लिक करते हैं, और 404 पेज मिलता है। लगभग हर किसी के साथ एक बार ऐसा होता है। WordPress अपने URL नियम एक कैश में रखता है, और नए पोस्ट टाइप उसमें अभी नहीं हैं।
हल: Settings → Permalinks पर जाएँ और Save Changes पर क्लिक करें। कुछ बदलने की ज़रूरत नहीं; सेव करने से नियम फिर से बन जाते हैं। अगर आप पोस्ट टाइप को किसी प्लगइन में देते हैं, तो नियम हर पेज लोड पर नहीं, बल्कि एक्टिवेशन पर एक बार फ़्लश करें, क्योंकि फ़्लश करना धीमा है।
टैक्सोनॉमी जोड़ना
टैक्सोनॉमी आपके आइटम को समूहों में बाँटती है, जैसे Books के लिए Genres। यह कैटेगरी की तरह हायरार्किकल हो सकती है, या टैग की तरह सपाट:
register_taxonomy( 'genre', 'book', array(
'label' => __( 'Genres', 'acme' ),
'hierarchical' => true,
'show_in_rest' => true,
'show_admin_column' => true,
'rewrite' => array( 'slug' => 'genres' ),
) );इसे भी init पर रजिस्टर करें। show_admin_column एडमिन सूची में एक काम का कॉलम जोड़ता है, और show_in_rest इसे ब्लॉक एडिटर की साइडबार में दिखाता है।
टेम्पलेट: रूप-रंग पर नियंत्रण
WordPress आपके पोस्ट टाइप के नाम वाली टेम्पलेट फ़ाइलें ढूँढता है। क्लासिक थीम में:
| टेम्पलेट | किसके लिए |
|---|---|
single-book.php | एक किताब |
archive-book.php | /books/ पर किताबों की लिस्टिंग |
taxonomy-genre.php | किसी genre की लिस्टिंग |
अगर ये फ़ाइलें मौजूद नहीं हैं, तो WordPress सामान्य single.php और archive.php पर लौट जाता है। शुरुआत उन्हें कॉपी करके और बदलकर करें। अगर आप किसी स्टार्टर से थीम बना रहे हैं, तो कस्टम WordPress थीम बनाने पर हमारी गाइड टेम्पलेट हायरार्की को विस्तार से समझाती है।
आइटम कहीं भी दिखाना
होमपेज पर नई किताबें दिखाने के लिए कस्टम क्वेरी इस्तेमाल करें:
$books = new WP_Query( array(
'post_type' => 'book',
'posts_per_page' => 6,
) );
while ( $books->have_posts() ) {
$books->the_post();
the_title( '<h3>', '</h3>' );
}
wp_reset_postdata();इसके बाद हमेशा wp_reset_postdata() कॉल करें ताकि पेज का बाक़ी हिस्सा फिर से मुख्य क्वेरी इस्तेमाल करे। WordPress Functions Reference में WP_Query और उससे जुड़े फ़ंक्शन के कॉपी करने लायक उदाहरण हैं।
अतिरिक्त फ़ील्ड जोड़ना
ज़्यादातर कस्टम कंटेंट को टाइटल और टेक्स्ट से ज़्यादा चाहिए: क़ीमत, लेखक, इवेंट की तारीख़। WordPress का अपना फ़ील्ड बॉक्स इस्तेमाल करने के लिए supports में custom-fields चालू करें, या ज़्यादा आसान फ़ॉर्म बनाने के लिए Advanced Custom Fields जैसा फ़ील्ड प्लगइन इस्तेमाल करें। दोनों ही तरीक़ों में वैल्यू post meta के रूप में सेव होती हैं और get_post_meta() से पढ़ी जाती हैं।
थीम या प्लगइन?
यह सबसे ज़रूरी फ़ैसला है, और जवाब लगभग हमेशा प्लगइन है। थीम की functions.php में रजिस्टर किया गया कंटेंट, कोई थीम बदलते ही एडमिन से ग़ायब हो जाता है। किताबें डेटाबेस में तो रहती हैं, लेकिन कोई उन्हें देख या एडिट नहीं कर सकता।
कोड को एक छोटे प्लगइन में रखने से कंटेंट टाइप डिज़ाइन से अलग रहता है। WordPress Plugin Generator इसे रखने के लिए साफ़ प्लगइन ढाँचा बनाता है, और अपना पहला WordPress प्लगइन बनाने पर हमारी गाइड बुनियादी बातें समझाती है।
इन ग़लतियों से बचें
productयाeventजैसी सामान्य की उन प्लगइन से टकरा सकती हैं जो वही चीज़ रजिस्टर करते हैं।show_in_restभूल जाना, और फिर सोचना कि ब्लॉक एडिटर क्यों नहीं है।- हर पेज लोड पर रीराइट नियम फ़्लश करना, जिससे पूरी साइट धीमी हो जाती है।
- ऐसे कंटेंट को थीम में रजिस्टर करना जिसे डिज़ाइन से ज़्यादा टिकना है।
- पब्लिक टाइप जिन्हें निजी रखना था। सिर्फ़ क्वेरी से दिखाए जाने वाले टेस्टिमोनियल या टीम सदस्य नॉन-पब्लिक हो सकते हैं, ताकि उन्हें अपने URL न मिलें और वे सर्च में न दिखें।
एक मज़बूत नींव
कस्टम पोस्ट टाइप WordPress को ब्लॉग से एक सही कंटेंट सिस्टम में बदल देते हैं, और वे जितने दिखते हैं उससे आसान हैं: एक फ़ंक्शन, कुछ सेटिंग, एक परमालिंक रीफ़्रेश और कुछ टेम्पलेट। WordPress CPT Generator से कोड बनाएँ, उसे एक प्लगइन में रखें, सिंगल और आर्काइव व्यू के लिए टेम्पलेट जोड़ें, और आपके एडिटर को अपने कंटेंट के लिए एक साफ़, अलग जगह मिल जाती है।



