चुने हुए पेज टेम्प्लेट के आधार पर टॉगल एडमिन मेटाबॉक्स


18

मैं एक कस्टम फ़ील्ड के लिए इंटरफेस दिखाने चाहते हैं केवल जब एक निश्चित टेम्पलेट एक विशेष वर्डप्रेस पेज को सौंपा गया है।

कोई विचार?


यदि इसे 'लाइव' करने की आवश्यकता नहीं है (यानी पेज टेम्प्लेट को बदलने की आवश्यकता नहीं है तो मेटाबेस को प्रकट / तुरंत गायब करने के लिए) इस संबंधित प्रश्न को देखें: wordpress.stackexchange.com/questions/48611/…
स्टीफन हैरिस

@StephenHarris टिप्पणी के लिए धन्यवाद। मैं WPAlchemy MetaBox वर्ग के साथ जा रहा हूं, जिसमें सेटअप में "प्रति टेम्पलेट" विकल्प शामिल है।
जोनाथन

जवाबों:


22

इस स्थिति से निपटने का सबसे अच्छा तरीका जावास्क्रिप्ट है। इस तरह, जब भी चयनित मूल्य बदलता है, तो आप संबंधित मेटाबॉक्स को तुरंत छिपा / दिखा सकते हैं।

का प्रयोग करें wp_enqueue_script()में functions.phpव्यवस्थापक क्षेत्र में एक कस्टम JavaScript फ़ाइल को लोड करने के लिए:

add_action('admin_enqueue_scripts', 'my_admin_script');
function my_admin_script()
{
    wp_enqueue_script('my-admin', get_bloginfo('template_url').'/my-admin.js', array('jquery'));
}

स्क्रिप्ट ही, जिसमें jQuery की आवश्यकता होती है, बस पेज टेम्पलेट ड्रॉपडाउन सूची में चयनित मूल्य के आधार पर एक मेटाबॉक्‍स छुपाता है या दिखाता है। इस उदाहरण में, मैं केवल डिफ़ॉल्ट पृष्ठ टेम्पलेट के चयन के मामले में पोस्ट थंबनेल के लिए मेटाबेस दिखा रहा हूं:

(function($){
$(document).ready(function() {

    var $page_template = $('#page_template')
        ,$metabox = $('#postimagediv'); // For example

    $page_template.change(function() {
        if ($(this).val() == 'default') {
            $metabox.show();
        } else {
            $metabox.hide();
        }
    }).change();

});
})(jQuery);

और, बस मज़े के लिए, यहाँ एक छोटी, कम क्रिया, एक ही स्क्रिप्ट का संस्करण है:

(function($){
$(function() {

    $('#page_template').change(function() {
        $('#postimagediv').toggle($(this).val() == 'default');
    }).change();

});
})(jQuery);

वाह धन्यवाद! मैं जल्द ही यह परीक्षा दे रहा हूं और उसी के अनुसार रिपोर्ट करूंगा।
जोनाथन ने

इतना भयानक ... यह सिर्फ मैं क्या जरूरत है। मेरे लिए परफेक्ट काम किया। धन्यवाद!!!
रोस

क्षमा करें, लेकिन मैं जावास्क्रिप्ट में एक वास्तविक शुरुआत कर रहा हूँ और मुझे पता है कि वहाँ सामान है जो मुझे चाहिए, लेकिन ऐसा लगता है कि मैं चीजों को सही तरीके से करने में सक्षम नहीं हूं ... इसलिए मुझे समझ में नहीं आ रहा है कि क्या मुझे जावास्क्रिप्ट फ़ाइल में बदलना है .. क्या मेरी तरह एक nooby के लिए अधिक स्पष्टीकरण होना संभव है? ;)

1

केवल मेटाबेस को रेंडर करने के बजाय इसे jQuery के साथ छिपाने के लिए आप इसका उपयोग कर सकते हैं। एकमात्र अंतर यह है कि मेटाबॉक्स को छिपाने / दिखाने के लिए ड्रॉप-डाउन फ़ील्ड को बदलने के बाद 'अपडेट' का चयन करना पड़ता है।

function add_meta_box() {
    global $post;
    if(!empty($post)) {
        $pageTemplate = get_post_meta($post->ID, '_wp_page_template', true);

        if($pageTemplate == 'your-page-template-here.php' ) {
            add_meta_box( $id, $title, $callback, 'page', $context, $priority, $callback_args );
        }
    }
}
add_action( 'add_meta_boxes', 'add_meta_box' );

बस वांछित के रूप में लाइनों 6 और 7 अद्यतन करें।

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