Come aggiungere campi personalizzati a un tipo di post personalizzato?


18

Ok, quindi ho registrato alcuni tipi di posta personalizzati e alcune tassonomie. Ora, per la mia vita, non riesco a capire il codice che devo aggiungere un campo personalizzato al mio tipo di post personalizzato.

Ho bisogno di un menu a discesa e di un'area di testo a riga singola. Ma devo anche avere campi separati per i tipi di post. Quindi, supponiamo che il tipo di post uno abbia 3 campi e il tipo di post 2 abbia 4 campi ma i campi sono diversi.

Qualche suggerimento mi aiuterebbe a guardare il codice e trovare qualcosa, ma non riesco a capire cosa devo aggiungere al mio functions.phpfile


Risposte:


19

1
davvero sarebbe così difficile. Ho pensato che sarebbe stato semplice come aggiungere un codice di registro alle mie funzioni come facciamo con i tipi di post e le tassonomie.
xLRDxREVENGEx

1
Ne aggiungerò una a questa risposta, ma non è troppo complessa. Il link thinkvitamin.com fa un ottimo lavoro spiegando come aggiungere i metabox e salvarli. Il link sltaylor.co.uk è un fantastico tutorial sull'uso di alcune ottime pratiche di codifica. La mia parola di cautela è fare attenzione quando si utilizza il save_postgancio. Si chiama in tempi strani. Assicurati di avere la variabile WP_DEBUG impostata su true per vedere i potenziali errori che si verificano durante l'utilizzo.
tollmanz

1
Solo un aggiornamento ho usato il link thinkvitamin e questo mi ha aiutato moltissimo ed è stata una passeggiata sulla configurazione dei campi personalizzati
xLRDxREVENGEx

25

Aggiungi / modifica l' supportsargomento (durante l'utilizzo register_post_type) per includere la custom-fieldsschermata di modifica post del tuo tipo di post personalizzato:

'supports' => array( 
  'title', 
  'editor', 
  'excerpt', 
  'thumbnail', 
  'custom-fields', 
  'revisions' 
)

Fonte: https://codex.wordpress.org/Using_Custom_Fields#Displaying_Custom_Fields


2
Puoi spiegare perché questo potrebbe risolvere il problema?
s_ha_dum,

1
Sì, funziona. Chi ha fatto la risposta. Puoi per favore riportarlo indietro? Saluti,
Junaid Qadir,

6
...e poi.........?
Segna il

9

Anche se dovresti aggiungere un po 'di convalida, questa azione non sembra essere complicata per la versione corrente di WordPress.

Fondamentalmente sono necessari due passaggi per aggiungere un campo personalizzato a un tipo di post personalizzato:

  1. Crea un metabox che contiene il tuo campo personalizzato
  2. Salva il tuo campo personalizzato nel database

Questi passaggi sono descritti a livello globale qui: http://wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type

Esempio:

Aggiungi un campo personalizzato chiamato "funzione" a un tipo di post personalizzato chiamato "prefix-teammembers".

Per prima cosa aggiungi il metabox:

function prefix_teammembers_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Function'), 'prefix_teammembers_metaboxes_html', 'prefix_teammembers', 'normal', 'high');
}
add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );

Se aggiungi o modifichi un "prefisso-membri della squadra", add_meta_boxes_{custom_post_type}viene attivato l' hook. Vedi http://codex.wordpress.org/Function_Reference/add_meta_box per la add_meta_box()funzione. Nella chiamata precedente di add_meta_box()è prefix_teammembers_metaboxes_html, un callback per aggiungere il campo del modulo:

function prefix_teammembers_metaboxes_html()
{
    global $post;
    $custom = get_post_custom($post->ID);
    $function = isset($custom["function"][0])?$custom["function"][0]:'';
?>
    <label>Function:</label><input name="function" value="<?php echo $function; ?>">
<?php
}

Nel secondo passaggio hai il tuo campo personalizzato per il database. Al salvataggio save_post_{custom_post_type}viene attivato l' hook (dalla v 3.7, consultare: /programming/5151409/wordpress-save-post-action-for-custom-posts ). Puoi agganciarlo per salvare il tuo campo personalizzato:

function prefix_teammembers_save_post()
{
    if(empty($_POST)) return; //why is prefix_teammembers_save_post triggered by add new? 
    global $post;
    update_post_meta($post->ID, "function", $_POST["function"]);
}   

add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );   

"perché prefix_teammembers_save_post è attivato da aggiungi nuovo?" hai trovato una risposta, mi sto anche imbattendo in un trigger di funzione extra che non riesco a ricordare?
alex,

"Aggiungi un campo personalizzato chiamato 'funzione" a un tipo di post personalizzato chiamato' prefix-teammembers '. "Cosa significa" chiamato "? Il nome? Il nome_sinular? L'etichetta? Forse è la stringa utilizzata come primo argomento in register_post_type o forse non importa che cosa sia purché sia ​​coerente
arnoldbird

1

Esistono vari plugin per meta box e campi personalizzati. Se guardi un plugin incentrato sugli sviluppatori, dovresti provare Meta Box . È leggero e molto potente.

Se stai cercando un tutorial su come scrivere il codice per un meta box / campi personalizzati, allora questo è un buon inizio. È la prima parte di una serie che potrebbe aiutarti a perfezionare il codice per semplificarne l'estensione.


-6
// slider_metaboxes_html , function for create HTML 
function slider_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Custom link'), 'slider_metaboxes_html', 'slider', 'normal', 'high');
}

//add_meta_boxes_slider => add_meta_boxes_{custom post type}
add_action( 'add_meta_boxes_slider', 'slider_metaboxes' );

Conoscenza perfetta

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.