Cum să faci câmpurile personalizate standard în interfața de administrare WordPress
Am adăugat câteva custom_post_types
diferite în instalarea mea de WordPress 3. Toate sunt puțin diferite între ele și ar trebui să stocheze informații unice în custom_fields
. Dar în timp ce unul poate stoca un product_id
, altul nu. Unul va avea un source_url
iar altul nu. În loc să fiu nevoit să instruiesc editorii mei despre ce câmpuri personalizate ar trebui folosite cu ce postări personalizate, cum pot face ca fiecare postare personalizată să includă câmpurile sale personalizate ca parte a interfeței în sine?
Dacă vizitezi "daily_cartoon" ai avea un ecran care solicită doar un titlu, subtitlu și media.
Dacă vizitezi "daily_product" ai avea un ecran care solicită doar un titlu, preț, rezumat, etc.

puteți adăuga meta_boxes pentru a stoca datele câmpurilor personalizate în ele. deoarece add_meta_box poate fi setat în funcție de post_type, acest lucru vă va permite să adăugați diferite meta_box la diferite tipuri de postări.
vizualizați acest articol pentru un exemplu complet de modificare a ecranului de editare/creare al tipului de postare personalizată.

Salut @Jonathan Sampson:
Există mai multe plugin-uri pentru a face tipurile de postări personalizate mai ușor de gestionat, iar unele permit și definirea câmpurilor personalizate, în nicio ordine anume:
Cum am menționat mai sus, am lucrat la unul care nu oferă o interfață de utilizator ca acestea, ci mai degrabă un API extensibil pentru tipuri de câmpuri complexe (și simple de asemenea). Dar după ce am petrecut o oră încercând să-l împachetez, am realizat că nu este încă gata pentru distribuire. Poate în câteva săptămâni.
Plugin-urile enumerate mai sus ar trebui să satisfacă nevoile tale de bază pentru moment, iar eu voi încerca să fac al meu compatibil cu datele stocate de toate acestea în viitor, în caz că vei decide să folosești al meu pe viitor.
De asemenea, s-ar putea să găsești acest articol de ajutor:

Recent am avut nevoie să abordez o problemă foarte similară în timp ce lucram la o temă. Baza codului a fost preluată din acest articol și am modificat o parte din cod.
Mai jos este prima parte a codului pe care l-am modificat.
add_action('init', 'limited_post_type');
function my_custom_limited_post_type()
{
$labels = array(
'name' => _x('Tipul de Postare Limită', 'nume general tip postare'),
'singular_name' => _x('Film - DVD', 'nume singular tip postare')
);
$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);
}
Mai jos este a doua parte a codului pe care l-am modificat.
foreach ( $scope as $scopeItem ) {
switch ( $scopeItem ) {
case "post": {
// Afișează pe orice ecran de postare
if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" || $post->post_type=="post" )
$output = true;
break;}
case "page": {
// Afișează pe orice ecran de pagină
if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="page-new.php" || $post->post_type=="page" )
$output = true;
break;}
case "limited_post_type": {
// Afișează doar pe tipul de postare limită
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;
}
Dacă dorești, poți să-mi trimiți un mesaj și cu plăcere îți voi trimite fișierul meu functions.php pentru referință. Aceasta este cu siguranță soluția pentru a realiza acest lucru, deoarece am trecut prin multe nopți de chin, la fel ca tine.
