Custom Post Type

Custom Post Type – सामान्‍यत: wp_posts Table में जितने Fields Specify किए गए हैं, किसी भी अन्‍य प्रकार के Document या Post में भी ये सभी या इन में से कुछ Fields सामान्‍य रूप से जरूर होते ही हैं।

उदाहरण के लिए यदि हम “page” Type के Post को देखें, तो एक Page में भी वे सभी Fields (ID, Title, Content, Author, etc…) होते हैं, जो कि एक Post या Revision या Attachment में होते हैं।

लेकिन अन्तर “page”“post” के Type में होता है। Page तब Create किया जाता है, जब हम ऐसा Static Content Create करना चाहते हैं, जो कि Time Dependent नहीं होता। जबकि Post हम तब Create करते हैं, जबकि हमारा Content Time Dependent होता है।

इसी तरह से Pages के Sub-Pages या Child-Pages हो सकते हैं, जिनके आधार पर Navigational Menu-System Create किया जा सकता है, जबकि Posts के आधार पर न तो Menu System Create किया जा सकता है न ही Posts का Child-Post या Sub-Post होता है।

यानी वास्तव में देखा जाए तो Page व Post Document के Content में कोई अन्तर नहीं है, बल्कि केवल इनकी प्रक`ति में अन्तर है। ठीक इसी तरह से यदि हम किसी अन्‍य प्रकार का Document Create करते हैं, तो उस Document में भी वे ही सारे Fields होंगे, जो कि एक Page या Post में होते हैं। जैसे कि उस Document का भी कुछ न कुछ ID होगा, कोई न कोई Title होगा, कोई न कोई Content होगा, कोई न कोई Author होगा, आदि।

इस स्थिति में यदि हमें किसी अलग प्रकार के Document या Data को WordPress द्वारा Manage करना हो, तो हमें अलग से एक नया Table Create करने की जरूरत नहीं है बल्कि हम wp_posts Table को ही अपने Document या Data को Store करने के लिए Use कर सकते हैं।

लेकिन जब हम wp_posts Table को अपना Custom Type के Document या Post को Store करने के लिए Use करना चाहते हैं, तब हमें उस Custom Post के Type को ही wp_posts Table के post_type Field में Specify करना होता है।

उदाहरण के लिए सामान्‍यत: किसी भी Website या Blog में अपने Registered Subscribers को नए Products या Offers की जानकारी देने के लिए समय-समय पर Email Send किया जाता है। इन Emails को Newsletters कहते हैं।

अब एक Newsletter में भी एक सामान्‍य Post या Page की तरह एक Title होता है, जो कि User के Email में Subject के रूप में दिखाई देता है। इसी तरह से Email का Content होता है, जो कि User के Email में Content की तरह दिखाई देता है। हर Newsletter का एक ID होता है, जिससे हर Newsletter को Uniquely Identify किया जाता है। इसी तरह से हर Newsletter की एक Creation या Modification Data होती है, जिससे Newsletters को Date-wise Manage करना सम्भव हो पाता है।

यानी एक Newsletter भी एक प्रकार का Document या Post ही है, जिसमें किसी अन्‍य WordPress Post की तरह ही विभिन्न Fields होते हैं, लेकिन फिर भी एक Newsletter किसी भी अन्‍य Post या Page से अलग होता है क्योंकि Posts को सामान्‍यत: Visitor User के Blog पर आकर देखता है जबकि Newsletters Visitors के Email Address पर Send किए जाते हैं, जिन्हें Visitor अपने Email Inbox में Read करता है।

अब यदि हम चाहें तो Newsletters को Store करने के लिए एक अलग Table Create कर सकते हैं या फिर wp_posts Table को ही Use करते हुए किसी Newsletter की विभिन्न Information को wp_post में ही Store कर सकते हैं।

चूंकि हम जानते हैं कि Newsletters अन्‍य WordPress Posts की तरह का Document नहीं होताए जो User को Web Browser में दिखाई देता है बल्कि ये एक अलग तरह का Document या Post होता है, जिसे User अपने Email Inbox में पढ़ता है। इसलिए यदि हम Newsletter की Information को wp_posts Table में Store करना चाहें, तो इसे “post” या “page” अथवा “attachment” या “revision” की तरह Store नहीं कर सकते।

बल्कि wp_posts Table में Store करते समय हमें इसे “newsletter” की तरह Store करना होगा और “newsletter” की तरह Store करने के लिए हमें उस समय wp_posts Table के post_type Field में Value के रूप में “newsletter” मान Store करना होगा, जिस समय हम अपने Newsletter को wp_posts Table में Save करते हैं।

इस तरह से अब wp_posts Table में जो Record Store होगा, वह एक नए प्रकार का Post होगा, जिसे Custom Post Type कह सकते हैं क्योंकि इस नए प्रकार के Post को हम हमारी इच्छानुसार wp_posts Table में Store कर रहे हैं।

आप समझ ही गए होंगे कि हम केवल Page या Post Type के Document को ही नहीं बल्कि Newsletter जैसे Document को भी wp_posts नाम की Table में Store कर सकते हैं और जो भी Document, Post या Page जैसा हो, उसे हम wp_posts Table में एक नए Custom Post Type की तरह Store कर सकते हैं।

यानी यदि सरल शब्दों में कहें तो Custom Post Type एक ऐसा Post होता है, जो कि होता तो Post या Page की तरह ही है, लेकिन Post या Page की तरह Website या Blog पर Render न होकर किसी और तरीके से Use होता है।

इस प्रकार के Post या Page जैसे Document को Store करने के लिए एक नया Table न Create करके जब हम wp_posts Table को ही उपयोग में ले लेते हैं और इस Table के केवल post_type Field को ही नए प्रकार के Document के लिए “newsletter” जैसे किसी नए मान से Set कर देते हैं, तो इस प्रकार के Document या Post को Custom Post Type कहा जाता है।

Custom Post Type की एक विशेषता ये भी होती है कि जब हम किसी नए प्रकार के Post को wp_posts Table में ही नए Custom Post Type की तरह Store करना चाहते हैं, तब हम इस नए Custom Post Type को wp_posts Table में Store करने के लिए उन्हीं Visual Tools का प्रयोग कर सकते हैं, जिनका प्रयोग करके हम किसी Post या Page को Create, Save, Draft, Publish आदि करते हैं।

यानी हम हमारा Custom Post Create करने के लिए भी WordPress के Standard Page/Post Editor को ही Use कर सकते हैं और हमें अलग से कोई Editor Create करने या Plugin के रूप में किसी अन्‍य Editor को Use करने की जरूरत नहीं होती।

लेकिन हम WordPress के Default Editor को सामान्‍य तरीके से अपनी Custom Theme के Templates में Use नहीं कर सकते। यदि हम WordPress के Default Editors को अपनी Custom Theme के Templates में Use करना चाहते हैं, तो हमें हमारी Theme में functions.php नाम की एक File Create करनी होती है। ये File एक प्रकार से हमारी Custom Theme के लिए Plugin Type की File होती है।

यानी हमें हमारे Templates में जिन भी WordPress Core Functionalities की जरूरत होती है, उन Functionalities को हम हमारे इस functions.php नाम की File में ही Define करते हैं। ये File वास्तव में हमारी Custom Theme के सभी Templates के लिए एक प्रकार से Global File की तरह होती है, जिसे हमारी Theme का हर Template File, Directly Access करने में सक्षम होता है।

चूंकि हम हमारे Custom Post Type के लिए WordPress का Default Editor चाहते हैं, ताकि हम हमारे Custom Post Type के लिए Content Create कर सकें। इसलिए इस जरूरत को पूरा करने के लिए हमें हमारी functions.php File में निम्नानुसार एक Function Create करना होता है:

File Name: /wp-content/themes/bccfalna/functions.php
<?php  
    add_action( 'init', 'cpt_newsletter' );
    function cpt_newsletter(){
        register_post_type( 
            'newsletter', 
            array(
                'labels' => array('name' => __( 'Newsletter' ),'singular_name' => __( 'Newsletter' )),
                'public' => true,
                'supports' => array('title','editor'),
                'query_var' => true
            )
        );
    }
?>

इस functions.php File में लिखे गए Codes के बारे में हम आगे विस्तार से जानेंगे, लेकिन जैसे ही हम हमारी bccfalna Theme में इस File को Create करके Save करते हैं और अपने WordPress Dashboard को Reload करते हैं, हमारे WordPress Dashboard पर निम्न चित्रानुसार “Newsletter” नाम का एक नया Dashboard Option दिखाई देने लगता है:

Custom Post Type - Template - Hindi

यानी अब हम इस स्थिति में हैं कि हम WordPress के Default Editor का प्रयोग करते हुए अपना Newsletter (Custom Post Type) Create कर सकते हैं। नया Post Create करने के लिए हमें इस Newly Appended Dashboard Options में “Add New” Option को Click करना होता है। जैसे ही हम इसे Click करते हैं, हमारे सामने निम्नानुसार WordPress Editor आ जाता है:

Custom Post Type - Template - Hindi

हम देख सकते हैं कि ये Editor वही है, जो हमें तब मिलता है, जब हम WordPress में नया Post या Page Create करते हैं। WordPress के इस Default Editor को Use करते हुए हम निम्नानुसार अपना Newsletter Crete कर सकते हैं:

Custom Post Type - Template - Hindi

जबकि हम जो भी Newsletters Create करते हैं, वे सभी हमें Newsletter Section में निम्नानुसार दिखाई देते हैं:

Custom Post Type - Template - Hindi

जब हम अपनी functions.php File के माध्‍यम से कोई भी नया Custom Post Type Define करते हैं और उस Custom Post Type के लिए WordPress के Default Editor का प्रयोग करके Content को wp_posts Table में Store करते हैं, तो Post के Table में Store हो जाने के बाद भी जब हम Newly Created Custom Post Type के Post को Web Browser द्वारा Render करने की कोशिश करते हैं, तो कई बार हमें Post Not Found का Error प्राप्त होता है।

इस Error का मुख्‍य कारण .htaccess File में लिखा गया Rewrite Rule होता है। इस Rule होता है, जिसे मूल रूप से WordPress द्वारा केवल WordPress के Default Post Types जैसे कि “post”, “page”, “revision”, “nav-menu”“attachment” के लिए ही Set किया जाता है। इसलिए जब हम कोई Custom Post Type Define करते हैं, तो “Page Not Found” का Error आता है।

इस Error से छुटकारा पाने के लिए हमें केवल WordPress Dashboard के Settings Panel में Permalinks Option को Click करना होता है और अपने Permalinks को निम्न चित्रानुसार Default Option से Set करके Save करना होता है:

Custom Post Type - Template - Hindi

एक बार Default Option Set करके Save करने के बाद हम फिर से निम्न चित्रानुसार किसी भी अन्‍य Permalinks को Select कर सकते हैं:

Custom Post Type - Template - Hindi

उपरोक्तानुसार अपने Permalinks को Reset करने पर हमारा Newly Created Custom Post Type Post अब Normal तरीके से Render होने लगता है क्योंकि जब हम उपरोक्तानुसार Default Permalink Set करके फिर से अपनी इच्छानुसार किसी दूसरे Permalink Format को Set करते हैं, तो WordPress Internally .htaccess File में लिखे गए Rewrite Rule को फिर से Reset करता है।

जब हम उपरोक्तानुसार कोई Custom Post Type Create करते हैं, तो Custom Post Type के सभी Posts के लिए हम अलग से एक Template Define कर सकते हैं। परिणामस्वरूप जब हम किसी Particular Custom Post Type के लिए कोई Template Design करते हैं, तो उस Template पर आधारित किसी Post को Web Browser में Load करने पर WordPress सबसे पहले उस Post के लिए Custom Post Type Template को Search करता है और यदि Custom Post Type Template Available हो, तो WordPress उस Custom Post Type Template को Use करते हुए ही Content को Finally Render करने के लिए index.php File पर Send करता है।

लेकिन यदि Custom Post Type Template Available न हो, तो WordPress उस Custom Post Type के Content को Finally Render करने के लिए सी/ो ही index.php File पर Send करता है।

यानी यदि हम functions.php File का प्रयोग करते हुए newsletter Type का एक Custom Post Type Create करें, जैसाकि पिछले Section में किया है और फिर newsletter Type का एक Post Create करें, जिसका URL निम्नानुसार हो:

http://localhost/wp/newsletter/only-for-registered-subscribers/

साथ ही यदि हम हमारे newsletter Type के सभी Posts को Special तरीके से Render करना चाहें, तो हम हमारे newsletter Type के Posts के लिए निम्नानुसार single-newsletter.php नाम का एक Template Create कर सकते हैं:

File Name: /wp-content/themes/bccfalna/single-newsletter.php

<h1> Weekly Newsletter</h1>
<p>This is from the single-newsletter.php Template and it is useful for displaying a
Particular Single Article which is saved with the newsletter Custom Post Type.</p>

अब जब हम उपरोक्त URL पर स्थित Newsletter को Web Browser के Addressbar में Load करके Render करते हैं, तो हमें निम्नानुसार Output प्राप्त होता है:

Custom Post Type - Template - Hindi

हम देख सकते हैं कि WordPress द्वारा हमारे newsletter Type के Custom Posts के लिए single-newsletter.php नाम का Template Execute हो रहा है।

क्योंकि जब हम newsletter Type के Custom Post को Web Browser द्वारा Render करने की कोशिश करते हैं, तो WordPress सबसे पहले newsletter Type के लिए single-newsletter.php नाम के Template को Search करता है और चूंकि ये Template हमारी bccfalna Theme में Already Exist है, इसलिए इसी Template को Current Post के लिए Execute कर देता है।

लेकिन यदि Currently Activated Theme में ये single-newsletter.php Template Exist नहीं होताए तो WordPress इस Custom Post Type को Render करने के लिए single.php Template को Use करता और यदि ये single.php Template भी Exist नहीं होताए तो अन्त में इस newsletter Type के Post को Render के लिए भी WordPress द्वारा index.php File को Execute कर दिया जाता।

WordPress in Hindi - BccFalna.comये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Advance WordPress in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।

Advance WordPress in Hindi | Page: 835 | Format: PDF

BUY NOW GET DEMO REVIEWS