สลับผู้ดูแลระบบ metabox ตามเทมเพลตของเพจที่เลือก


18

ฉันต้องการให้ส่วนต่อประสานฟิลด์กำหนดเองปรากฏขึ้นเฉพาะเมื่อเทมเพลตบางตัวถูกกำหนดให้กับหน้า WordPress เฉพาะ

ความคิดใด ๆ


หากไม่จำเป็นต้องเป็น 'สด' (เช่นการเปลี่ยนเทมเพลตหน้าไม่จำเป็นต้องทำให้เมตาอกซ์ปรากฏ / หายไปทันที) ดูคำถามที่เกี่ยวข้องนี้: wordpress.stackexchange.com/questions/48611/ …
Stephen Harris

@StephenHarris ขอบคุณสำหรับความคิดเห็น ฉันปิดท้ายด้วยคลาส WPAlchemy MetaBox ซึ่งรวมถึงตัวเลือก "ต่อเทมเพลต" ในการตั้งค่า
Jonathan Wold

คำตอบ:


22

วิธีที่ดีที่สุดในการเข้าถึงสถานการณ์นี้คือผ่าน JavaScript ด้วยวิธีนี้เมื่อใดก็ตามที่การเปลี่ยนแปลงค่าที่เลือกคุณสามารถซ่อน / แสดง metabox ที่เกี่ยวข้องได้ทันที

ใช้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 เพียงซ่อนหรือแสดง metabox ตามค่าที่เลือกในรายการแบบเลื่อนลงของเทมเพลตหน้า ในตัวอย่างนี้ฉันจะแสดงเฉพาะ metabox สำหรับโพสต์รูปขนาดย่อในกรณีที่เลือกเทมเพลตหน้าเริ่มต้น:

(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);

และเพื่อความสนุกสนานนี่เป็นสคริปต์ที่เหมือนกันสั้นกว่า verbose น้อยกว่า:

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

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

});
})(jQuery);

ว้าวขอบคุณ! ฉันจะทำการทดสอบนี้ในไม่ช้าและจะรายงานกลับตามนั้น
Jonathan Wold

ยอดเยี่ยมมาก ... นี่คือสิ่งที่ฉันต้องการ ทำงานได้สมบูรณ์แบบสำหรับฉัน ขอขอบคุณ!!!
Ross

ขออภัย แต่ฉันเป็นมือใหม่จริงในจาวาสคริปต์และฉันรู้ว่าสิ่งที่มีสิ่งที่ฉันต้องการ แต่ดูเหมือนว่าฉันไม่สามารถทำสิ่งต่าง ๆ ในวิธีที่ถูกต้อง ... ดังนั้นฉันไม่แน่ใจว่าจะเข้าใจอะไร ฉันจะเปลี่ยนไฟล์ javascript เป็นไปได้ไหมที่จะมีคำอธิบายเพิ่มเติมสำหรับ 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 ตามต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.