क्या मैं एक कस्टम पोस्ट प्रकार के लिए एक टेम्पलेट प्रदान कर सकता हूं?


35

क्या मैं एक कस्टम पोस्ट प्रकार के लिए एक टेम्प्लेट फ़ाइल प्रदान कर सकता हूं?

मैंने एक कस्टम पोस्ट टाइप बनाया है items, और मैं उस आइटम को टेम्पलेट असाइन करना चाहूंगा जैसे आप पृष्ठों के साथ कर सकते हैं।


wpbeginner.com/wp-themes/… (यह पदों के लिए है, लेकिन आप इसे CPT के लिए संशोधित कर सकते हैं) nathanrice.net/blog/wordpress-single-post-templates (यह पदों के लिए है लेकिन आप इसे CPT के लिए संशोधित कर सकते हैं) एक प्लगइन के लिए वास्तव में अच्छा विचार है।
व्येक

जवाबों:


50

वर्डप्रेस संस्करण 4.7 से अब आप पेज के साथ अन्य पोस्ट प्रकारों के लिए कस्टम पेज टेम्पलेट असाइन कर सकते हैं।

टेम्पलेट नाम फ़ाइल हेडर के अतिरिक्त इसे प्राप्त करने के लिए, टेम्पलेट पोस्ट द्वारा समर्थित पोस्ट प्रकार टेम्पलेट पोस्ट प्रकार का उपयोग करके निर्दिष्ट किया जा सकता है: निम्नानुसार।

<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/

आप इसके बारे में अधिक जानकारी निम्न पृष्ठों पर प्राप्त कर सकते हैं।

https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post प्रकार-टेम्पलेट्स में 4-7 /


21

आप उदाहरण के लिए, फ़ाइलें बनाकर कस्टम पोस्ट प्रकारों के लिए टेम्पलेट बना सकते हैं:

single-mycustomposttype.php

कोडेक्स में टेम्पलेट पदानुक्रम देखें ।

पुनश्च : इसका उत्तर पहले ही दिया जा चुका है


2
इसके लिए धन्यवाद, लेकिन मैं यह जानना चाहूंगा कि क्या कस्टम टेम्पलेट को कस्टम पोस्ट प्रकारों में जोड़ना संभव है। उदाहरण के लिए, क्या मैं दो टेम्पलेट बना सकता हूं और प्रत्येक टेम्पलेट को संबंधित पद पर असाइन कर सकता हूं? यह केवल एक टेम्पलेट फ़ाइल को निर्दिष्ट करने के लिए उस विशिष्ट पोस्ट प्रकार को संभालने की अनुमति देता है जहां तक ​​मैं इसे समझता हूं।
Odyss3us

देखें, यदि आपको एकल पोस्ट के लिए अलग-अलग टेम्पलेट की आवश्यकता है, तो आप प्रत्येक आवश्यक टेम्पलेट के अनुसार कई कस्टम पोस्ट प्रकार बनाना चाह सकते हैं। मुझे लगता है कि यह निर्भर करता है कि आपको कितने विभिन्न टेम्प्लेट की आवश्यकता है। आप प्रत्येक पोस्ट पर अलग-अलग होने की आवश्यकता वाले टेम्पलेट्स में क्या करने जा रहे हैं?
माइक

यह उत्तर अब पुराना हो चुका है। देखें विनोद दलवी का जवाब
साइमन ईस्ट

8

यहाँ मेरे लिए क्या काम करता है:

add_filter('single_template', function($original){
  global $post;
  $post_name = $post->post_name;
  $post_type = $post->post_type;
  $base_name = 'single-' . $post_type . '-' . $post_name . '.php';
  $template = locate_template($base_name);
  if ($template && ! empty($template)) return $template;
  return $original;
});

इस प्रकार कस्टम पोस्ट टाइप foobarका एक पद और hello-worldउपरोक्त कोड का एक स्लग single-foobar-hello-world.phpटेम्पलेट को लोड करेगा , यदि यह अस्तित्व में है।


4

Google के माध्यम से इस धागे तक पहुंचने वालों के लिए, WP 4.7 ने सभी प्रकार के पोस्ट के लिए टेम्पलेट पेश किए। पूर्ण चलने के लिए WP कोर बनाएँ देखें । अब आप अपने सभी CPT के लिए एक टेम्प्लेट तक सीमित नहीं हैं, आप अलग-अलग टेम्प्लेट पोस्ट को उसी तरह से असाइन कर सकते हैं जैसे आप पृष्ठों के साथ कर सकते हैं।


2

यह थोड़ा पुराना है लेकिन आप यह भी आजमा सकते हैं:

कस्टम पोस्ट प्रकार के लिए एक खाका बनाएँ:

single-*custom-post-type-slug*.php

फ़ाइल को स्लग की जांच करनी चाहिए और सत्यापित करना चाहिए कि क्या फ़ाइल मौजूद है, यदि नहीं, तो डिफ़ॉल्ट टेम्पलेट फ़ाइल में वापस आ जाए:

<?php 
    $slug = get_post_field( 'post_name', get_post() );
    $slug = ( locate_template( 'templates/*custom-post-type-slug*/' . $slug . '.php' ) ) ? $slug : 'default';

    get_template_part( 'templates/*custom-post-type-slug*/' . $slug  );
?>

कस्टम-पोस्ट-टाइप-स्लग के सभी उदाहरणों को अपने कस्टम पोस्ट प्रकार के वास्तविक स्लग से बदलें ।

मैं उपयोग में आसानी और संगठनात्मक उद्देश्यों के लिए ऐसा करता हूं। यह मुझे लगता है कि विषय के रूट फ़ोल्डर में सभी फ़ाइलों की तुलना में क्लीनर है।

उदाहरण फ़ोल्डर संरचना:

themeroot
| |single-cases.php
|-templates
| --cases
|   |default.php
|   |case-one.php
|   |case-two.php

1

पहले अपनी इच्छा के अनुसार आइटम के रूप में नामित पृष्ठ पर बनाएं, जो आइटम पोस्ट प्रकार से सामग्री प्रदर्शित करते हैं, एक टेम्पलेट फ़ाइल को नीचे के रूप में बनाते हैं और उस टेम्पलेट-आइटम को नाम देते हैं। आपके द्वारा बनाए गए पृष्ठ के लिए उस टेम्पलेट का चयन करें।

<div class="container">

    <div class="row">

        <div class="col-md-9">
            <div class="panel panel-default text-center">
                <?php $loop = new WP_Query( array( 'post_type' => 'items', 'posts_per_page' => 5 ) ); ?>                        

                        <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
                            <?php the_title();?>
                            <?php if(has_post_thumbnail() ) { the_post_thumbnail(); } ?>
                            <?php the_content();?>
                        <?php endwhile; ?>

                <?php wp_reset_query(); ?>                      
            </div>
        </div>

    </div>

</div>

1

यह करना बहुत सरल है।

अपनी थीम रूट डायरेक्टरी में एक नई PHP फ़ाइल बनाएं और इसे शीर्ष पर जोड़ें:

<?php /*
 * Template Name: My custom view
 * Template Post Type: Post_typename   // here you need to add the name of your custom post type
 */ ?>

पूर्ण उदाहरण निम्नलिखित होगा:

<?php /*
 * Template Name: My custom view
 * Template Post Type: Post_typename   // here you need to add the name of your custom post type
 */ ?>
<?php get_header();?>


<div class="container pt-5 pb-5">


    <?php if (has_post_thumbnail()):?>

      <img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid">

    <?php endif;?>




    <?php if (have_posts()) : while (have_posts()) : the_post();?>

        <?php the_content();?>

    <?php endwhile; endif;?>


</div>

<?php get_footer();?>

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