Saya ingin agar antarmuka bidang khusus muncul hanya ketika templat tertentu ditetapkan ke laman WordPress tertentu.
Ada ide?
Saya ingin agar antarmuka bidang khusus muncul hanya ketika templat tertentu ditetapkan ke laman WordPress tertentu.
Ada ide?
Jawaban:
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.php
untuk 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);
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.