Rendere i Campi Personalizzati Standard nell'Interfaccia di Amministrazione

4 set 2010, 03:53:41
Visualizzazioni: 1.49K
Voti: 7

Ho aggiunto diversi custom_post_types alla mia installazione di WordPress 3. Ognuno è leggermente diverso dagli altri e dovrebbe memorizzare informazioni uniche nei custom_fields. Mentre uno potrebbe memorizzare un product_id, un altro no. Uno avrà un source_url e un altro no. Invece di dover istruire i miei editori su quali campi personalizzati utilizzare con quali post personalizzati, come posso fare in modo che ogni post personalizzato includa i suoi campi personalizzati come parte dell'interfaccia utente stessa?

Se visiti "daily_cartoon" avresti una schermata che richiede solo un titolo, didascalia e media.
Se visiti "daily_product" avresti una schermata che richiede solo un titolo, prezzo, riassunto, ecc.

3
Commenti

@Jonathan Sampson: Lavorerò tutto il weekend a un pacchetto per risolvere questo problema (ci sto lavorando da oltre un mese.) Ma ho una scadenza fissata per martedì, quindi niente risposte alle domande su StackExchange per me questo weekend. Se la questione non sarà ancora risolta più avanti la prossima settimana, mi occuperò sicuramente di lei.

MikeSchinkel MikeSchinkel
4 set 2010 19:27:34

@MikeSchinkel Sto ancora lavorando al progetto, quindi se hai già completato il tuo strumento sarò più che felice di provarlo e condividere la mia esperienza.

Sampson Sampson
12 set 2010 04:02:50

Ciao @Jonathan Sampson: Non sono ancora pronto a pubblicarlo, ma posso lavorare con te privatamente come mio primo beta tester se ti va. Contattami via email, il mio indirizzo email è sulla mia pagina del profilo utente: http://wordpress.stackexchange.com/users/89/mikeschinkel

MikeSchinkel MikeSchinkel
12 set 2010 06:20:59
Tutte le risposte alla domanda 3
0

puoi aggiungere meta_boxes per memorizzare i dati dei campi personalizzati al loro interno. poiché add_meta_box può essere configurato in base al post_type, questo ti permetterà di aggiungere meta_box diverse a diversi tipi di post.

guarda questo articolo per un esempio completo di modifica della schermata di nuovo/modifica del tipo di post personalizzato.

4 set 2010 04:41:06
2

Ciao @Jonathan Sampson:

Esistono diversi plugin per semplificare la creazione di Custom Post Types e alcuni permettono anche di definire Custom Fields, senza un ordine particolare:

Come ho già accennato, sto lavorando a un plugin che invece di fornire un'interfaccia utente come questi, offre un'API estensibile per tipi di campo complessi (e anche quelli semplici). Ma dopo aver passato un'ora a cercare di impacchettarlo, mi sono reso conto che non è ancora pronto per la distribuzione. Forse tra qualche settimana.

I plugin elencati sopra dovrebbero soddisfare le tue esigenze di base per ora, e cercherò di rendere il mio compatibile con i dati memorizzati da tutti questi nel caso in cui decidessi di utilizzare il mio in futuro.

Potresti anche trovare utile questo articolo:

12 set 2010 22:46:56
Commenti

Segnerò questa domanda come preferita e aspetterò la tua soluzione ;)

ariefbayu ariefbayu
12 set 2010 23:37:12

@silent: Fantastico!

MikeSchinkel MikeSchinkel
13 set 2010 01:27:59
0

Recentemente ho avuto bisogno di affrontare un problema molto simile mentre lavoravo all'interno di un tema. La base del codice proveniva da questo articolo e ho modificato parte del codice.

Di seguito la prima porzione del codice che ho modificato.

    add_action('init', 'limited_post_type');
function my_custom_limited_post_type() 
{
  $labels = array(
    'name' => _x('Tipo di Post Limitato', 'nome generale del tipo di post'),
    'singular_name' => _x('Film - DVD', 'nome singolare del tipo di post')
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true, 
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('title','editor','author','thumbnail','excerpt', 'page-attributes','custom-fields' ),
    'show_in_nav_menus' => true
  ); 
  register_post_type('limited_post_type', $args);
}

Di seguito la seconda porzione del codice che ho modificato.

foreach ( $scope as $scopeItem ) {
       switch ( $scopeItem ) {
           case "post": {
             // Output su qualsiasi schermata di post
             if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" || $post->post_type=="post" )
             $output = true;
             break;}              
            case "page": {
                  // Output su qualsiasi schermata di pagina
                  if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="page-new.php" || $post->post_type=="page" )
            $output = true;
            break;}
             case "limited_post_type": {
                                // Output solo sul tipo di post limitato
            if ((basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" && $post->post_type=="limited_post_type" ) || (basename( $_SERVER['SCRIPT_FILENAME'] )=="post.php" && $post->post_type=="film_dvd" ))
                   $output = true;
                   break;
                  }

Se vuoi, inviami un messaggio e sarò felice di inviarti il mio file functions.php come riferimento. Questo è sicuramente il modo per farlo funzionare, visto che ho passato molte notti a strapparmi i capelli proprio come te.

14 set 2010 04:40:52