Attiva / disattiva admin metabox in base al modello di pagina scelto


18

Vorrei che fosse visualizzata un'interfaccia di campo personalizzata solo quando un determinato modello è assegnato a una determinata pagina di WordPress.

Qualche idea?


Se non è necessario che sia "attivo" (ovvero la modifica del modello di pagina non ha bisogno di far apparire / scomparire immediatamente il metabox), consultare questa domanda correlata: wordpress.stackexchange.com/questions/48611/…
Stephen Harris

@StephenHarris Grazie per il commento. Ho finito con la classe MetaBox WPAlchemy, che include un'opzione "per modello" nell'installazione.
Jonathan Wold,

Risposte:


22

Il modo migliore per affrontare questa situazione è tramite JavaScript. In questo modo, ogni volta che il valore selezionato cambia, puoi nascondere / mostrare istantaneamente il relativo metabox.

Utilizzare wp_enqueue_script()in functions.phpper caricare un file JavaScript personalizzato nell'area di amministrazione:

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

Lo script stesso, che richiede jQuery, nasconde o mostra semplicemente un metabox basato sul valore selezionato nell'elenco a discesa del modello di pagina. In questo esempio, sto solo mostrando il metabox per le miniature dei post nel caso in cui sia selezionato il modello di pagina predefinito:

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

E, solo per divertimento, ecco una versione più breve, meno dettagliata dello stesso script:

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

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

});
})(jQuery);

Wow grazie! Presto eseguirò un test e riferirò di conseguenza.
Jonathan Wold,

Così fantastico ... questo è proprio quello di cui avevo bisogno. Ha funzionato perfettamente per me. Grazie!!!
Ross,

Scusa ma sono un vero principiante in javascript e so che le cose che sono lì sono ciò di cui ho bisogno, ma sembra che non sia in grado di fare le cose nel modo corretto ... Quindi non sono sicuro di capire cosa Devo cambiare nel file javascript .. È possibile avere più spiegazioni per un nooby come me? ;)

1

Invece di rendere il metabox solo per nasconderlo con jQuery puoi usarlo. L'unica differenza è che il nascondere / mostrare il metabox richiede di selezionare "Aggiorna" dopo aver modificato il campo a discesa.

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

Basta aggiornare le righe 6 e 7 come desiderato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.