Cum să faci câmpurile personalizate standard în interfața de administrare WordPress

4 sept. 2010, 03:53:41
Vizualizări: 1.49K
Voturi: 7

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.

3
Comentarii

@Jonathan Sampson: Lucrez tot weekend-ul la un pachet pentru a rezolva această problemă (lucrez la el de peste o lună.) Dar am o termen limită până marți, așa că nu voi răspunde la întrebări pe StackExchange în acest weekend. Dacă problema încă nu este rezolvată săptămâna viitoare, cu siguranță mă voi ocupa de ea.

MikeSchinkel MikeSchinkel
4 sept. 2010 19:27:34

@MikeSchinkel De fapt, încă lucrez la proiect, așa că dacă ai terminat deja instrumentul tău, aș fi foarte bucuros să-l testez și să împărtășesc experiența mea.

Sampson Sampson
12 sept. 2010 04:02:50

Salut @Jonathan Sampson: Nu sunt încă pregătit să-l public, dar pot colabora cu tine în privat ca primul meu beta tester, dacă dorești. Contactează-mă prin email, adresa mea de email este pe pagina mea de profil: http://wordpress.stackexchange.com/users/89/mikeschinkel

MikeSchinkel MikeSchinkel
12 sept. 2010 06:20:59
Toate răspunsurile la întrebare 3
0

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ă.

4 sept. 2010 04:41:06
2

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:

12 sept. 2010 22:46:56
Comentarii

Voi marca ca favorită această întrebare și voi aștepta soluția ta ;)

ariefbayu ariefbayu
12 sept. 2010 23:37:12

@silent: Super!

MikeSchinkel MikeSchinkel
13 sept. 2010 01:27:59
0

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.

14 sept. 2010 04:40:52