मुझे एक प्लगइन बनाने की आवश्यकता है जो कस्टम पेज टेम्पलेट्स को wp-admin में उपलब्ध कराता है। मैं सोच रहा था कि किसी ने पहले से ही इस से निपट लिया है, क्योंकि यह एक बहुत विशिष्ट प्रक्रिया की तरह लगता है?
मुझे एक प्लगइन बनाने की आवश्यकता है जो कस्टम पेज टेम्पलेट्स को wp-admin में उपलब्ध कराता है। मैं सोच रहा था कि किसी ने पहले से ही इस से निपट लिया है, क्योंकि यह एक बहुत विशिष्ट प्रक्रिया की तरह लगता है?
जवाबों:
जैसे Rarst ने उत्तर दिया कि आप वास्तव में ऐसा कर सकते हैं कि कोर फ़ाइलों को संपादित किए बिना या पृष्ठ विशेषताओं को हटा दें मेटाबॉक्स और उसी कोड का उपयोग करके थोड़ा संशोधन करके अपना बनाएं। नीचे दिया गया कोड /admin/include/meta-boxes.php का कोड है और मैंने यह दिखाने के लिए एक टिप्पणी जोड़ी है कि आपके अतिरिक्त पृष्ठ टेम्पलेट विकल्प कहां जाएंगे:
function page_attributes_meta_box($post) {
$post_type_object = get_post_type_object($post->post_type);
if ( $post_type_object->hierarchical ) {
$pages = wp_dropdown_pages(array('post_type' => $post->post_type, 'exclude_tree' => $post->ID, 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
if ( ! empty($pages) ) {
?>
<p><strong><?php _e('Parent') ?></strong></p>
<label class="screen-reader-text" for="parent_id"><?php _e('Parent') ?></label>
<?php echo $pages; ?>
<?php
} // end empty pages check
} // end hierarchical check.
if ( 'page' == $post->post_type && 0 != count( get_page_templates() ) ) {
$template = !empty($post->page_template) ? $post->page_template : false;
?>
<p><strong><?php _e('Template') ?></strong></p>
<label class="screen-reader-text" for="page_template"><?php _e('Page Template') ?></label><select name="page_template" id="page_template">
<option value='default'><?php _e('Default Template'); ?></option>
<?php page_template_dropdown($template); ?>
// add your page templates as options
</select>
<?php
} ?>
<p><strong><?php _e('Order') ?></strong></p>
<p><label class="screen-reader-text" for="menu_order"><?php _e('Order') ?></label><input name="menu_order" type="text" size="4" id="menu_order" value="<?php echo esc_attr($post->menu_order) ?>" /></p>
<p><?php if ( 'page' == $post->post_type ) _e( 'Need help? Use the Help tab in the upper right of your screen.' ); ?></p>
<?php
}
पता नहीं कि यह आपके मामले में ठीक है, लेकिन मेरे पास एक स्माइलर मामला था जब मुझे पोस्ट प्रकार को एक अंतर्निहित बिल्ट-इन थीम को प्रदर्शित करने की आवश्यकता थी और उसके लिए मैंने उपयोग किया add_filter('the_content', 'my-function');
और मेरे-फ़ंक्शन ने प्रदर्शित करने के लिए आउटपुट बनाया।
एक और विकल्प यह होगा कि आप अपने प्लगइन को वर्तमान थीम डायरेक्टरी में टेम्प्लेट फ़ाइल बनाएँ, कुछ इस तरह:
function create_plugins_theme_file(){
$file_name = TEMPLATEPATH . '/' . $tamplate_name . '.php';
$handle = fopen($file_name, 'w') or wp_die('Cannot open file for editing');
$file_contents = <<<OUT
<?php
/*
Template Name: $tamplate_name
*/
?>
//you theme file here
OUT;
fwrite($handle, $file_contents);
fclose($handle);
}
और आप इसे पहले चलाने के बाद जाँच सकते हैं कि फाइल मौजूद है या नहीं
if(!file_exists( $file_name)){create_plugins_theme_file();}
आशा है कि यह मदद करता है।
मुझे पूरी तरह से यकीन नहीं है कि मैं समझता हूं कि आप क्या हासिल करने की कोशिश कर रहे हैं, कम से कम आप ऐसा क्यों करना चाहते हैं।
विभिन्न पेज टेम्प्लेट बनाने की सामान्य प्रक्रिया है:
अपनी सक्रिय थीम डायरेक्टरी में एक नया पेज-टेम्प्लेट बनाएं (पेज की प्रतिलिपि बनाएँ। पीपीपी)।
टेम्पलेट का नाम (फ़ाइल के अंदर) बदलें।
/ * टेम्पलेट का नाम: पूर्ण चौड़ाई पृष्ठ * /
पृष्ठ का कोड बदलें जिसे आप प्राप्त करने की कोशिश कर रहे हैं।
अब आप एक नया पेज बना सकते हैं और चुन सकते हैं कि किस "टेम्पलेट" का उपयोग करना है।
...
मुझे आशा है कि आप क्या हासिल करने की कोशिश कर रहे हैं?
आधिकारिक दस्तावेज यहाँ: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates
यह प्राप्त करना काफी कठिन प्रतीत होता है। get_page_templates()
फ़ंक्शन सक्रिय रूप से ऐसी किसी भी चीज़ को छोड़ देता है जो पैरेंट और चाइल्ड रूट डाइरेक्टरी में नहीं है। यह ग्लोबल वैरिएबल में भी स्टोर नहीं होता है या टेम्प्लेट की जेनरेट की गई सूची को फ़िल्टर करने की अनुमति नहीं देता है।
मुझे लगता है कि पृष्ठ विशेषताएँ मेटा बॉक्स को फोर्क करने और इसके लिए पूरी तरह से प्रतिस्थापित करने की आवश्यकता होगी। और यकीन नहीं होगा तब भी यह संभव होगा।
मैं मानता हूं कि यह कुछ ऐसा है जो समझ में आता है, लेकिन वर्डप्रेस कोड इस बात में बहुत सटीक है कि यह नामांकित टेम्प्लेट केवल थीम की निर्देशिका से आना चाहता है।
क्या यह उन कारणों में से एक नहीं है जो register_theme_directory()
पेश किए गए हैं?
http://core.trac.wordpress.org/ticket/10467
उस समय यह बड्डीप्रेस से संबंधित एक मुद्दा था, जो यहां और वहां अतिरिक्त टेम्पलेट्स में टॉस करना चाहता था।
मुझे लगता है कि वे ठीक से पेज टेम्प्लेट के रूप में सूचीबद्ध नहीं हैं, हालांकि: