क्या एक वर्डप्रेस प्लगइन है जो एक कस्टम फ़ाइल टेम्पलेट के रूप में एक प्लगइन फ़ाइल को पंजीकृत करता है?


9

मुझे एक प्लगइन बनाने की आवश्यकता है जो कस्टम पेज टेम्पलेट्स को wp-admin में उपलब्ध कराता है। मैं सोच रहा था कि किसी ने पहले से ही इस से निपट लिया है, क्योंकि यह एक बहुत विशिष्ट प्रक्रिया की तरह लगता है?


मैं सवाल को काफी नहीं समझता। आप एक प्लगइन चाहते हैं जो प्लगइन में परिभाषित कस्टम टेम्पलेट सम्मिलित करता है?
स्टीवन

जवाबों:


7

जैसे 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();}

आशा है कि यह मदद करता है।


मेटा बॉक्स सामान का परीक्षण करेगा, मेरे उत्तर के अनुसार बस - यह केवल समस्या का हिस्सा है, अन्य है - कोड जो केवल थीम निर्देशिका में होने पर टेम्पलेट लोड करने का प्रयास करता है। इसलिए "बाहरी" टेम्प्लेट फ़ाइल प्रदान करना इसे लोड करने के लिए पर्याप्त नहीं हो सकता है।
20

इसीलिए मैंने थीम के डायरेक्टरी में फाइल बनाने के लिए प्लगइन बनाने का सुझाव दिया।
बैनेटर्न

2

मुझे पूरी तरह से यकीन नहीं है कि मैं समझता हूं कि आप क्या हासिल करने की कोशिश कर रहे हैं, कम से कम आप ऐसा क्यों करना चाहते हैं।

विभिन्न पेज टेम्प्लेट बनाने की सामान्य प्रक्रिया है:

  1. अपनी सक्रिय थीम डायरेक्टरी में एक नया पेज-टेम्प्लेट बनाएं (पेज की प्रतिलिपि बनाएँ। पीपीपी)।

  2. टेम्पलेट का नाम (फ़ाइल के अंदर) बदलें।

    / * टेम्पलेट का नाम: पूर्ण चौड़ाई पृष्ठ * /

  3. पृष्ठ का कोड बदलें जिसे आप प्राप्त करने की कोशिश कर रहे हैं।

  4. अब आप एक नया पेज बना सकते हैं और चुन सकते हैं कि किस "टेम्पलेट" का उपयोग करना है।

वैकल्पिक शब्द

...

मुझे आशा है कि आप क्या हासिल करने की कोशिश कर रहे हैं?

आधिकारिक दस्तावेज यहाँ: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates


ओह। नमूना PHP कोड थोड़ा गड़बड़ है। उचित कोड उदाहरण के लिए लिंक पर जाएं।
लार्स कौडल

2
यह जानने में रुचि है कि क्या कोई किसी मौजूदा प्लगइन में जनवरी की विधि का उपयोग कर रहा है: wordpress.stackexchange.com/questions/3396/…
jnthnclrk

मेरा मानना ​​है कि @trnsfrmr एक तरीका खोज रहा है कि प्लगइन सक्रियण के बाद उपयोगकर्ताओं के लिए इस टेम्पलेट को उपलब्ध कराने के लिए अपने स्वयं के प्लगइन के अंदर पूर्व-निर्धारित पृष्ठ टेम्पलेट (चरण 1-3) कैसे बनाया जाए। मुझे लगता है कि वह इस समाधान विषय को स्वतंत्र रखना चाहते हैं।
मिशाल मऊ

आह, ठीक है, मैं वहाँ थोड़ा गलत समझा, स्पष्टीकरण के लिए धन्यवाद :-)
लार्स कौडल

2

यह प्राप्त करना काफी कठिन प्रतीत होता है। get_page_templates()फ़ंक्शन सक्रिय रूप से ऐसी किसी भी चीज़ को छोड़ देता है जो पैरेंट और चाइल्ड रूट डाइरेक्टरी में नहीं है। यह ग्लोबल वैरिएबल में भी स्टोर नहीं होता है या टेम्प्लेट की जेनरेट की गई सूची को फ़िल्टर करने की अनुमति नहीं देता है।

मुझे लगता है कि पृष्ठ विशेषताएँ मेटा बॉक्स को फोर्क करने और इसके लिए पूरी तरह से प्रतिस्थापित करने की आवश्यकता होगी। और यकीन नहीं होगा तब भी यह संभव होगा।

मैं मानता हूं कि यह कुछ ऐसा है जो समझ में आता है, लेकिन वर्डप्रेस कोड इस बात में बहुत सटीक है कि यह नामांकित टेम्प्लेट केवल थीम की निर्देशिका से आना चाहता है।


1

क्या यह उन कारणों में से एक नहीं है जो register_theme_directory()पेश किए गए हैं?

http://core.trac.wordpress.org/ticket/10467

उस समय यह बड्डीप्रेस से संबंधित एक मुद्दा था, जो यहां और वहां अतिरिक्त टेम्पलेट्स में टॉस करना चाहता था।

मुझे लगता है कि वे ठीक से पेज टेम्प्लेट के रूप में सूचीबद्ध नहीं हैं, हालांकि:

http://core.trac.wordpress.org/ticket/15803


मैं कोड (शायद कल) पर जाऊंगा, लेकिन जहां तक ​​मुझे याद है कि नामों के साथ टेम्पलेट स्पष्ट रूप से केवल पथ स्थिरांक के माध्यम से देखे जाते हैं।
रार्स्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.