Ich möchte, dass eine benutzerdefinierte Feldoberfläche nur angezeigt wird, wenn einer bestimmten WordPress-Seite eine bestimmte Vorlage zugewiesen ist.
Irgendwelche Ideen?
Ich möchte, dass eine benutzerdefinierte Feldoberfläche nur angezeigt wird, wenn einer bestimmten WordPress-Seite eine bestimmte Vorlage zugewiesen ist.
Irgendwelche Ideen?
Antworten:
Der beste Weg, um sich dieser Situation zu nähern, ist JavaScript. Auf diese Weise können Sie bei jeder Änderung des ausgewählten Werts die zugehörige Metabox sofort ausblenden / anzeigen.
Verwenden Sie wp_enqueue_script()
in functions.php
, um eine benutzerdefinierte JavaScript-Datei im Admin-Bereich zu laden:
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'));
}
Das Skript selbst, für das jQuery erforderlich ist, blendet einfach eine Metabox basierend auf dem ausgewählten Wert in der Dropdown-Liste der Seitenvorlagen aus oder zeigt sie an. In diesem Beispiel zeige ich nur die Metabox für Post-Thumbnails an, wenn die Standardseitenvorlage ausgewählt ist:
(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);
Und aus Spaß ist hier eine kürzere, weniger ausführliche Version desselben Skripts:
(function($){
$(function() {
$('#page_template').change(function() {
$('#postimagediv').toggle($(this).val() == 'default');
}).change();
});
})(jQuery);
Anstatt die Metabox nur zu rendern, um sie mit jQuery auszublenden, können Sie dies verwenden. Der einzige Unterschied besteht darin, dass das Ein- und Ausblenden der Metabox nach dem Ändern des Dropdown-Felds die Auswahl von "Aktualisieren" erfordert.
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' );
Aktualisieren Sie einfach die Zeilen 6 und 7 wie gewünscht.