क्या मैं एक कस्टम पोस्ट प्रकार के लिए एक टेम्प्लेट फ़ाइल प्रदान कर सकता हूं?
मैंने एक कस्टम पोस्ट टाइप बनाया है items
, और मैं उस आइटम को टेम्पलेट असाइन करना चाहूंगा जैसे आप पृष्ठों के साथ कर सकते हैं।
क्या मैं एक कस्टम पोस्ट प्रकार के लिए एक टेम्प्लेट फ़ाइल प्रदान कर सकता हूं?
मैंने एक कस्टम पोस्ट टाइप बनाया है items
, और मैं उस आइटम को टेम्पलेट असाइन करना चाहूंगा जैसे आप पृष्ठों के साथ कर सकते हैं।
जवाबों:
वर्डप्रेस संस्करण 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 /
आप उदाहरण के लिए, फ़ाइलें बनाकर कस्टम पोस्ट प्रकारों के लिए टेम्पलेट बना सकते हैं:
single-mycustomposttype.php
कोडेक्स में टेम्पलेट पदानुक्रम देखें ।
यहाँ मेरे लिए क्या काम करता है:
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
टेम्पलेट को लोड करेगा , यदि यह अस्तित्व में है।
Google के माध्यम से इस धागे तक पहुंचने वालों के लिए, WP 4.7 ने सभी प्रकार के पोस्ट के लिए टेम्पलेट पेश किए। पूर्ण चलने के लिए WP कोर बनाएँ देखें । अब आप अपने सभी CPT के लिए एक टेम्प्लेट तक सीमित नहीं हैं, आप अलग-अलग टेम्प्लेट पोस्ट को उसी तरह से असाइन कर सकते हैं जैसे आप पृष्ठों के साथ कर सकते हैं।
यह थोड़ा पुराना है लेकिन आप यह भी आजमा सकते हैं:
कस्टम पोस्ट प्रकार के लिए एक खाका बनाएँ:
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
पहले अपनी इच्छा के अनुसार आइटम के रूप में नामित पृष्ठ पर बनाएं, जो आइटम पोस्ट प्रकार से सामग्री प्रदर्शित करते हैं, एक टेम्पलेट फ़ाइल को नीचे के रूप में बनाते हैं और उस टेम्पलेट-आइटम को नाम देते हैं। आपके द्वारा बनाए गए पृष्ठ के लिए उस टेम्पलेट का चयन करें।
<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>
यह करना बहुत सरल है।
अपनी थीम रूट डायरेक्टरी में एक नई 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();?>
हमने कस्टम पोस्ट टेम्पलेट प्लगइन का उपयोग करके एक और समाधान तैयार किया