ฉันต้องการให้ส่วนต่อประสานฟิลด์กำหนดเองปรากฏขึ้นเฉพาะเมื่อเทมเพลตบางตัวถูกกำหนดให้กับหน้า WordPress เฉพาะ
ความคิดใด ๆ
ฉันต้องการให้ส่วนต่อประสานฟิลด์กำหนดเองปรากฏขึ้นเฉพาะเมื่อเทมเพลตบางตัวถูกกำหนดให้กับหน้า WordPress เฉพาะ
ความคิดใด ๆ
คำตอบ:
วิธีที่ดีที่สุดในการเข้าถึงสถานการณ์นี้คือผ่าน 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);
แทนที่จะแสดงเมท็อกซ์เพื่อซ่อนด้วย 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 ตามต้องการ