Beralih metabox admin berdasarkan templat halaman yang dipilih

18

Saya ingin agar antarmuka bidang khusus muncul hanya ketika templat tertentu ditetapkan ke laman WordPress tertentu.

Ada ide?

Jonathan Wold
sumber
Jika tidak harus 'langsung' (yaitu mengubah templat halaman tidak perlu membuat metabox segera muncul / menghilang) lihat pertanyaan terkait ini: wordpress.stackexchange.com/questions/48611/…
Stephen Harris
@StephenHarris Terima kasih atas komentarnya. Saya akhirnya pergi dengan kelas WPAlchemy MetaBox, yang mencakup opsi "per template" dalam pengaturan.
Jonathan Wold

Jawaban:

22

Cara terbaik untuk mendekati situasi ini adalah melalui JavaScript. Dengan begitu, setiap kali nilai yang dipilih berubah, Anda dapat langsung menyembunyikan / menampilkan metabox terkait.

Gunakan wp_enqueue_script()di functions.phpuntuk memuat file kustom JavaScript di admin area:

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'));
}

Script itu sendiri, yang membutuhkan jQuery, cukup menyembunyikan atau menampilkan metabox berdasarkan nilai yang dipilih dalam daftar dropdown template halaman. Dalam contoh ini, saya hanya menampilkan metabox untuk thumbnail postingan jika template halaman default dipilih:

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

Dan, hanya untuk bersenang-senang, inilah versi skrip yang sama, lebih pendek, kurang verbose:

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

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

});
})(jQuery);
Geert
sumber
Wow Terimakasih! Saya akan segera memberikan tes ini dan akan melaporkan kembali sesuai.
Jonathan Wold
Sangat mengagumkan ... ini hanya yang saya butuhkan. Bekerja sempurna untukku. Terima kasih!!!
Ross
Maaf tapi saya benar-benar pemula dalam javascript dan saya tahu hal-hal yang ada apa yang saya butuhkan, tetapi sepertinya saya tidak dapat melakukan hal-hal dengan cara yang benar ... Jadi saya tidak yakin untuk memahami apa Saya harus mengubah file javascript .. Apakah mungkin untuk memiliki lebih banyak penjelasan untuk pemula seperti saya? ;)
1

Daripada merender metabox hanya untuk menyembunyikannya dengan jQuery, Anda dapat menggunakan ini. Satu-satunya perbedaan adalah bahwa menyembunyikan / menampilkan metabox memerlukan memilih 'Perbarui' setelah mengubah bidang drop-down.

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

Cukup perbarui baris 6 dan 7 yang diinginkan.

davidcondrey
sumber