Cum se Adaugă Câmpuri Personalizate la un Tip de Postare Personalizat?
Ok, deci am înregistrat câteva tipuri de postări personalizate și câteva taxonomii. Acum, oricât aș încerca, nu pot găsi codul necesar pentru a adăuga un Câmp Personalizat la Tipul meu de Postare Personalizat.
Am nevoie de un meniu dropdown și o zonă de text pe o singură linie. Dar am nevoie și de câmpuri separate pentru tipurile de postări. Deci, să zicem că tipul de postare unu are 3 câmpuri și tipul de postare 2 are 4 câmpuri, dar câmpurile sunt diferite.
Orice sugestii ar ajuta. Am consultat codexul și am găsit ceva, dar nu pot înțelege ce trebuie să adaug în fișierul meu functions.php

Adăugați/editați argumentul supports
(în timp ce utilizați register_post_type
) pentru a include custom-fields
în ecranul de editare al postării pentru tipul dumneavoastră personalizat de postare:
'supports' => array(
'title',
'editor',
'excerpt',
'thumbnail',
'custom-fields',
'revisions'
)
Sursa: https://developer.wordpress.org/reference/functions/register_post_type/#supports

Da, funcționează.
Cine a dat -1 la răspuns. Poți să îl retragi, te rog?
Salutări,

Acest lucru este probabil mai complicat decât crezi, aș recomanda utilizarea unui framework:
Dacă dorești să îți creezi propria soluție, iată câteva tutoriale utile:

chiar ar fi atât de greu. Credeam că va fi la fel de simplu ca adăugarea unui cod de înregistrare în funcțiile mele, așa cum facem cu tipurile de postări și taxonomiile.

Voi susține acest răspuns, dar nu este prea complicat. Linkul thinkvitamin.com explică foarte bine cum să adaugi metadate și să le salvezi. Linkul sltaylor.co.uk este un tutorial minunat despre utilizarea unor practici de codare excelente. Un cuvânt de avertizare este să fii atent când folosești hook-ul save_post
. Este apelat în momente ciudate. Asigură-te că ai variabila WP_DEBUG setată pe true pentru a vedea potențiale erori care apar la utilizarea acestuia.

Doar o actualizare, am folosit linkul thinkvitamin și acesta a ajutat enorm și a fost foarte ușor să configurez câmpuri personalizate

Deși ar trebui să adăugați o validare, această acțiune nu pare complicată pentru versiunea actuală de WordPress.
În esență, aveți nevoie de doi pași pentru a adăuga un Câmp Personalizat la un Tip de Postare Personalizat:
- Crearea unei metachete care să conțină Câmpul Personalizat
- Salvarea Câmpului Personalizat în baza de date
Acești pași sunt descriși global aici: http://wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type
Exemplu:
Adăugarea unui Câmp Personalizat numit "funcție" la un Tip de Postare Personalizat numit "prefix-membriiechipei".
Mai întâi adăugați metacheta:
function prefix_teammembers_metaboxes( ) {
global $wp_meta_boxes;
add_meta_box('postfunctiondiv', __('Funcție'), 'prefix_teammembers_metaboxes_html', 'prefix_teammembers', 'normal', 'high');
}
add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );
Dacă adăugați sau editați un "prefix-membriiechipei", acțiunea add_meta_boxes_{custom_post_type}
este declanșată. Consultați http://codex.wordpress.org/Function_Reference/add_meta_box pentru funcția add_meta_box()
. În apelul de mai sus al add_meta_box()
, prefix_teammembers_metaboxes_html
este un callback pentru a adăuga câmpul de formular:
function prefix_teammembers_metaboxes_html()
{
global $post;
$custom = get_post_custom($post->ID);
$function = isset($custom["function"][0])?$custom["function"][0]:'';
?>
<label>Funcție:</label><input name="function" value="<?php echo $function; ?>">
<?php
}
În al doilea pas, salvați câmpul personalizat în baza de date. La salvare, acțiunea save_post_{custom_post_type}
este declanșată (începând cu versiunea 3.7, vezi: https://stackoverflow.com/questions/5151409/wordpress-save-post-action-for-custom-posts). Puteți folosi acest hook pentru a salva câmpul personalizat:
function prefix_teammembers_save_post()
{
if(empty($_POST)) return; //de ce este prefix_teammembers_save_post declanșat la adăugarea unui nou membru?
global $post;
update_post_meta($post->ID, "function", $_POST["function"]);
}
add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );

"de ce este prefix_teammembers_save_post declanșat la adăugarea unui nou post?" ați găsit un răspuns, și eu mă confrunt cu o declanșare suplimentară a funcției pe care nu o mai rețin?

"Adaugă un Câmp Personalizat numit 'funcție' la un Tip de Postare Personalizat numit 'prefix-teammembers'." Ce înseamnă "numit"? Numele? singular_name? Eticheta? Poate este șirul folosit ca prim argument în funcția register_post_type. Sau poate nu contează ce este, atâta timp cât este consistent.

Linkul către thinkvitamin.com din răspunsul acceptat nu mai este activ. Acel website și-a schimbat domeniul în treehouse.com. Răspund aici doar pentru că nu am suficientă reputație pentru a comenta. Conținutul acelui link expirat este disponibil aici: https://blog.teamtreehouse.com/create-your-first-wordpress-custom-post-type pentru cei care au nevoie de el. Mult succes!

Există diverse pluginuri pentru metadate personalizate și câmpuri personalizate. Dacă te uiți la un plugin care se adresează dezvoltatorilor, atunci ar trebui să încerci Meta Box. Este ușor și foarte puternic.
Dacă cauți un tutorial despre cum să scrii cod pentru o cutie de metadate / câmpuri personalizate, atunci acesta este un bun punct de start. Este prima parte dintr-o serie care te poate ajuta să rafinezi codul pentru a-l face ușor de extins.

Știu că această întrebare este veche, dar pentru mai multe informații despre subiect:
WordPress are suport încorporat pentru câmpuri personalizate. Dacă ai un tip de postare personalizat, tot ce trebuie să faci este să incluzi 'custom-fields' în array-ul de suport din register_post_type, așa cum a răspuns @kubante.
Notă că această opțiune este disponibilă și pentru tipurile de postări native, cum ar fi articolele și paginile - trebuie doar să o activezi.
Acest câmp personalizat este foarte simplu și acceptă o valoare de tip string. În multe cazuri, acest lucru este suficient, dar pentru câmpuri mai complexe, recomand să folosești plugin-ul 'Advanced Custom Fields'.

Dacă crezi că ai făcut totul corect și folosești WordPress 5.7, probabil tot ce trebuie să faci este să-l afișezi în panoul suplimentar.
Apasă pe cele 3 puncte verticale din stânga sus > preferințe > Panouri
Desigur, asta după ce te-ai asigurat că tipul de postare are configurația corectă.

function custom_field(){ // câmpuri personalizate pentru tipul de postare personalizată stackoverflow
add_meta_box(
'custom_field',
'Câmp personalizat',
'custom_field_type',
'user',
'normal',
'low'
);
}
add_action('add_meta_boxes','custom_field');
function custom_field_type($post){
$state = get_post_meta($post->ID,'state',true);
$country = get_post_meta($post->ID,'country',true);
$pincode = get_post_meta($post->ID,'pincode',true);
$college = get_post_meta($post->ID,'college',true);
?>
<label for = "state"> Stat : </label>
<input type ="text" name="state" value="<?php echo $state ?>"><br><br>
<label for = "country"> Țară : </label>
<input type ="text" name="country" value="<?php echo $country ?>"><br><br>
<label for = "pincode"> Cod poștal : </label>
<input type ="text" name="pincode" value="<?php echo $pincode?>"><br><br>
<label for = "college"> Nume colegiu : </label>
<input type ="text" name="college" value="<?php echo $college ?>"><br><br>
<?php
}
function handle_custom_field($post_id){
if(isset($_POST['state'])){
$state = $_POST['state'];
update_post_meta($post_id, 'state', $state);
}
if(isset($_POST['country'])){
$country = $_POST['country'];
update_post_meta($post_id,'country', $country);
}
if(isset($_POST['pincode'])){
$pincode = $_POST['pincode'];
update_post_meta($post_id,'pincode',$pincode);
}
if(isset($_POST['college'])){
$college = $_POST['college'];
update_post_meta($post_id,'college',$college);
}
}
add_action('save_post','handle_custom_field');

// slider_metaboxes_html , funcție pentru crearea HTML
function slider_metaboxes( ) {
global $wp_meta_boxes;
add_meta_box('postfunctiondiv', __('Link personalizat'), 'slider_metaboxes_html', 'slider', 'normal', 'high');
}
//add_meta_boxes_slider => add_meta_boxes_{tip personalizat de postare}
add_action( 'add_meta_boxes_slider', 'slider_metaboxes' );
Cunoaștere perfectă
