C'è un modo semplice per fare in modo che una meta-box abbia le schede come la meta-box Categorie ha?


13

La mia domanda è praticamente riassunta nel titolo. Sto lasciando cadere una meta-box nella pagina di amministrazione Nuovo post / Modifica post e voglio essere in grado di configurarla con le schede come ha fatto la meta-box Categorie. Presumo che ci sia un modo semplice per agganciarlo, ma non ricordo come. Qualcuno lo sa?


guarda il mark-up delle meta meta categorie, usa la stessa struttura html e le stesse classi e dovresti avere le schede
onetrickpony,

Grazie - l'ho fatto e penso che JS stia (giustamente) usando gli ID per nascondere le schede inattive. Impossibile duplicare gli ID, quindi potrebbe essere necessario scrivere semplicemente il mio JS.
Jason Rhodes,

Risposte:


13

Ecco un esempio molto semplice ..

/*
    Code assumes it will be in the theme functions.php file
    Update the enqueue path if using it elsewhere
*/
add_action( 'add_meta_boxes_post', 'add_post_metabox' );

function add_post_metabox() {
    wp_enqueue_script( 'mytabs', get_bloginfo( 'stylesheet_directory' ). '/mytabs.js', array( 'jquery-ui-tabs' ) );
    add_meta_box( 'examplebox' , __('Example box'), 'my_example_metabox', 'post', 'side', 'core'/*,array()*/);
}

function my_example_metabox() {
    ?>
    <div id="mytabs">
        <ul class="category-tabs">
            <li><a href="#frag1">Tab 1</a></li>
            <li><a href="#frag2">Tab 2</a></li>
            <li><a href="#frag3">Tab 3</a></li>
        </ul>
        <br class="clear" />
        <div id="frag1">
            <p>#1 - Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
        </div>
        <div class="hidden" id="frag2">
            <p>#2 - Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
        </div>
        <div class="hidden" id="frag3">
            <p>#3 - Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
        </div>
    </div>
    <?php
}

Il jQuery per mytabs.js a cui si fa riferimento nell'accodamento.

jQuery(document).ready(function($) {
    $("#mytabs .hidden").removeClass('hidden');
    $("#mytabs").tabs();
});

APPUNTI:

  • Utilizzato all'interno di un plug-in, l'accodamento deve chiamare plugins_url( '/mytabs.js', __FILE__ )al posto della get_bloginfostringa.
  • Il collegamento di ancoraggio per ciascuna scheda deve corrispondere all'ID dell'elemento di contenuto a cui fa riferimento, ad es. frag1, frag2, ecc.
  • Una classe nascosta viene applicata a ciascun DIV contenuto dopo il primo in modo che vengano nascosti al caricamento della pagina (altrimenti noterai un breve salto nella pagina), la classe viene rimossa dopo il caricamento della pagina, altrimenti rimarranno nascosti.
  • L'azione principale dovrebbe essere aggiornata per riflettere il tipo di post che si desidera effettuare add_action( "add_meta_boxes_YOURTYPE", 'add_post_metabox' );, ho usato postnell'esempio.
  • Dovrai eseguire il rendering del metabox sul lato per utilizzare CSS WordPress esistente che posiziona gli elementi della scheda LI in linea (puoi sempre caricare il tuo foglio di stile per gestire i CSS).

Vedi qui per maggiori informazioni su come configurare lo script delle schede.
http://docs.jquery.com/UI/Tabs

Spero possa aiutare..


t31os, ho cambiato il wp_enqueue_script in: wp_enqueue_script ('mytabs', get_bloginfo ('template_directory'). '/js/mytabs.js', array ('jquery-ui-tabs')); e ho messo mytabs.js nella cartella / js / nella radice del tema, ma non funziona
Philip

1
@Philip - Il codice è un esempio funzionante, controlla l'origine dell'output e verifica che i percorsi di accodamento vengano prodotti correttamente .. (o che siano stati emessi tutti insieme) ..
t31os

faccio un errore ... scusami per la confusione! tutto funziona bene.
Filippo,

@Philip - Nessun problema amico, nessun danno fatto ..;)
t31os
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.