चाइल्ड थीम से पेरेंट थीम पेज टेम्पलेट को * कैसे हटाएं *?


17

मैं एक बच्चे का विषय बनाने के लिए ट्वेंटीटन थीम का उपयोग कर रहा हूं, लेकिन मैं 'वन कॉलम, नो साइडबार' पेज टेम्पलेट से छुटकारा नहीं पा सकता हूं जो कि ट्वेंटीटेन पैरेंट थीम में है।

मैंने सोचा कि बस इसे कॉपी करना और सामग्री को हटाना ट्रिक करेगा, लेकिन ऐसा नहीं लगता। क्या किसी को भी यह करना आता है? मुझे यकीन है कि यह बहुत सरल है।

धन्यवाद

osu

जवाबों:


11

उस टेम्पलेट को ओवरराइड करना इससे छुटकारा पाने की तुलना में बहुत आसान होगा। जिस तरह से तर्क जाता है।

मैं यह दावा नहीं करता कि यह कुशल विचार है (देर से यहाँ), लेकिन यह इसे संपादित स्क्रीन से nuked मिलेगा:

add_action('admin_head-post.php','remove_template');

function remove_template() {

    global $wp_themes;

    get_themes();
    $templates = &$wp_themes['Twenty Ten']['Template Files'];
    $template = trailingslashit( TEMPLATEPATH ).'onecolumn-page.php';
    $key = array_search($template, $templates);
    unset( $templates[$key] );
}

इसके लिए धन्यवाद, जो एक अच्छा समाधान की तरह दिखता है - जब आप टेम्पलेट को ओवरराइड करने के लिए कहते हैं, तो क्या आपका मतलब केवल एक कॉलम टेम्पलेट को शामिल करना है? या क्या आप इसका मतलब यह है कि मैं वास्तव में उपयोग करना चाहते हैं (यानी इसे एक कॉलम कहते हैं, लेकिन यह वास्तव में या 3 कॉलम है?)
११:११

@ मैं अपने समान टेम्पलेट के साथ ओवरराइड करने का मतलब था। जहां तक ​​तर्क जाता है कि चाइल्ड थीम को बदलना और पैरेंट थीम के टेम्प्लेट को जोड़ना आसान है, लेकिन उन्हें अक्षम करना कठिन है। मूल रूप से चाइल्ड थीम को पेरेंट थीम से ज्यादा करना चाहिए, कम नहीं। और कोड लॉजिक इस सिद्धांत का अनुसरण करता है।
रारस्ट

आह अच्छा। इसे साफ करने के लिए धन्यवाद। मैं तब उनके लिए एक कोला टेम्पलेट बनाऊंगा। चीयर्स
ओसू

किसी के लिए भी जो jQuery का उपयोग कर ड्रॉपडाउन सूची से विषय को हटाना चाहता है, तो यह एक और तरीका है (सुनिश्चित नहीं है कि यह सबसे अच्छा तरीका है हालांकि): pastie.org/3710683
Osu

2
@brasofilo विषय-संबंधित इंटर्नल्स 3.4 में प्रमुख रिफैक्टरिंग और एपीआई परिवर्तनों से
गुजरे

29

वर्डप्रेस 3.9 एक theme_page_templatesफिल्टर का परिचय देता है ।

एक चौदह बाल विषय से नीचे का उदाहरण functions.phpदिखाता है कि "योगदानकर्ता पृष्ठ" टेम्पलेट को कैसे हटाया जाए:

function tfc_remove_page_templates( $templates ) {
    unset( $templates['page-templates/contributors.php'] );
    return $templates;
}
add_filter( 'theme_page_templates', 'tfc_remove_page_templates' );

3
यह WP 3.9+ के लिए अद्यतन स्वीकृत उत्तर होना चाहिए
हेलगैथवाइकिंग

9

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

function remove_template( $files_to_delete = array() ){
    global $wp_themes;

    // As convenience, allow a single value to be used as a scalar without wrapping it in a useless array()
    if ( is_scalar( $files_to_delete ) ) $files_to_delete = array( $files_to_delete );

    // remove TLA if it was provided
    $files_to_delete = preg_replace( "/\.[^.]+$/", '', $files_to_delete );

    // Populate the global $wp_themes array
    get_themes();

    $current_theme_name = get_current_theme();

    // Note that we're taking a reference to $wp_themes so we can modify it in-place
    $template_files = &$wp_themes[$current_theme_name]['Template Files'];

    foreach ( $template_files as $file_path ){
        foreach( $files_to_delete as $file_name ){
            if ( preg_match( '/\/'.$file_name.'\.[^.]+$/', $file_path ) ){
                $key = array_search( $file_path, $template_files );
                if ( $key ) unset ( $template_files[$key] );
            }
        }
    }
}

तो आप इसे अपने बच्चे के विषय में उपयोग कर सकते हैं।

add_action( 'admin_head-post.php', 'remove_parent_templates' );

function remove_parent_templates() {
    remove_template( array( "showcase.php", "sidebar-page" ) );
}

यहाँ मैं केवल यह बता रहा हूँ कि यदि आप नहीं चाहते हैं तो आपको ".php" भाग पास नहीं करना है।

या: remove_template( "sidebar-page" );- यदि आपको केवल एक फ़ाइल को संशोधित करना है तो आपको एक सरणी पास करने की आवश्यकता नहीं है।


6

पृष्ठ टेम्पलेट निकालने के लिए WP कोर (3.9) में एक नया फ़िल्टर है। इसका उपयोग बाल विषयों से किया जा सकता है।

यहां देखें कि इसे ट्वेंटीटन में कैसे हासिल किया जाए (WP 3.9 पर परीक्षण किया गया):

add_filter( 'theme_page_templates', 'my_remove_page_template' );
    function my_remove_page_template( $pages_templates ) {
    unset( $pages_templates['onecolumn-page.php'] );
    return $pages_templates;
}

https://core.trac.wordpress.org/changeset/27297

http://boiteaweb.fr/theme_page_templates-hook-semaine-16-8033.html


यदि लिंक बदल जाता है या नीचे ले जाया जाता है तो एक लिंक ऑफ़साइट बेकार हो जाता है। यह भी वास्तव में सवाल का जवाब देने के लिए कोई प्रयास नहीं करता है
टॉम जे नोवेल

काफी उचित, उदाहरण जोड़ा।
मार्शियो ड्यूआर्टे

1

पिछले उत्तरों के बाद से अब वर्डप्रेस के वर्तमान संस्करणों में यहाँ काम नहीं किया गया था और एक संबंधित प्रश्न था, जिसका मैंने अभी (अप्रैल 2013 में) एक PHP आउटपुट बफर का उपयोग करके पता लगाया कि मैं उस उत्तर के लिए एक लिंक पोस्ट करूँगा ।

इसके अलावा सिर्फ Omit पैरेंट थीम पेज टेम्प्लेट प्लगइन प्रकाशित किया है जो वर्डप्रेस पेज को जोड़ते या संपादित करते समय मेटाबॉक्स में टेम्पलेट्स की ड्रॉपडाउन सूची से सभी पेरेंट थीम पेज टेम्प्लेट को फ़िल्टर करता है


0

10 जुलाई, 2012 - वर्डप्रेस 3.4.1

पिछले उत्तर काम नहीं कर रहे हैं और जैसा कि रर्स्ट ने एक टिप्पणी में कहा है:

विषय-संबंधित इंटर्नल्स 3.4 में प्रमुख रीफैक्टरिंग और एपीआई परिवर्तनों से गुजरे, इसलिए बहुत सारे पुराने सामान काम नहीं करेंगे

त्वरित और गंदा jQuery समाधान

add_action('admin_head', 'wpse_13671_script_enqueuer');

function wpse_13671_script_enqueuer() {
    global $current_screen;

    /**
     * /wp-admin/edit.php?post_type=page
     */
    if('edit-page' == $current_screen->id) 
    {
        ?>
        <script type="text/javascript">         
        jQuery(document).ready( function($) {
            $("a.editinline").live("click", function () {
                var ilc_qe_id = inlineEditPost.getId(this);
                setTimeout(function() {
                        $('#edit-'+ilc_qe_id+' select[name="page_template"] option[value="showcase.php"]').remove();  
                    }, 100);
            });

            $('#doaction, #doaction2').live("click", function () {
                setTimeout(function() {
                        $('#bulk-edit select[name="page_template"] option[value="showcase.php"]').remove();  
                    }, 100);
            });       
        });    
        </script>
    <?php
    }

    /**
     * /wp-admin/post.php?post=21&action=edit
     */
    if( 'page' == $current_screen->id ) 
    {
        ?>
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $('#page_template option[value="showcase.php"]').remove();
        });
        </script>
    <?php
    }
}

उसके लिए कोई हुक नहीं?

अगर मैंने सही रास्ते का अनुसरण किया, तो यह वह जगह है जहां "कार्रवाई" होती है ( /wp-includes/class-wp-theme.php), और ऐसा लगता है कि यहां हुक करने के लिए कुछ भी नहीं है ...

/**
 * Returns the theme's page templates.
 *
 * @since 3.4.0
 * @access public
 *
 * @return array Array of page templates, keyed by filename, with the value of the translated header name.
 */
public function get_page_templates() {
    // If you screw up your current theme and we invalidate your parent, most things still work. Let it slide.
    if ( $this->errors() && $this->errors()->get_error_codes() !== array( 'theme_parent_invalid' ) )
        return array();

    $page_templates = $this->cache_get( 'page_templates' );

    if ( ! is_array( $page_templates ) ) {
        $page_templates = array();

        $files = (array) $this->get_files( 'php', 1 );

        foreach ( $files as $file => $full_path ) {
            $headers = get_file_data( $full_path, array( 'Template Name' => 'Template Name' ) );
            if ( empty( $headers['Template Name'] ) )
                continue;
            $page_templates[ $file ] = $headers['Template Name'];
        }

        $this->cache_add( 'page_templates', $page_templates );
    }

    if ( $this->load_textdomain() ) {
        foreach ( $page_templates as &$page_template ) {
            $page_template = $this->translate_header( 'Template Name', $page_template );
        }
    }

    if ( $this->parent() )
        $page_templates += $this->parent()->get_page_templates();

    return $page_templates;
}

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