Benutzerdefinierte Felder in der Admin-Benutzeroberfläche standardisieren

7

Ich habe custom_post_typesmeiner Wordpress 3-Installation einige andere hinzugefügt . Sie unterscheiden sich alle ein wenig voneinander und sollten eindeutige Informationen in speichern custom_fields. Aber während einer ein speichern kann, wird ein product_idanderer nicht. Einer wird einen haben source_urlund ein anderer nicht. Anstatt meine Redakteure anweisen zu müssen, welche benutzerdefinierten Felder für welche benutzerdefinierten Beiträge verwendet werden sollen, wie kann ich dafür sorgen, dass jeder benutzerdefinierte Beitrag seine benutzerdefinierten Felder als Teil der Benutzeroberfläche selbst enthält?

Wenn Sie "daily_cartoon" besuchen, wird ein Bildschirm angezeigt, auf dem nur nach Titel , Beschriftung und Medien gefragt wird .
Wenn Sie "daily_product" besuchen, wird ein Bildschirm angezeigt, in dem nur nach Titel , Preis , Zusammenfassung usw. gefragt wird.

Sampson
quelle
@ Jonathan Sampson : Ich arbeite das ganze Wochenende an einem Paket, um dies zu beheben (ich arbeite seit über einem Monat daran). Aber ich habe eine Frist von Dienstag, sodass ich an diesem Wochenende keine Fragen zu StackExchange beantworten kann. Wenn dies später in der nächsten Woche noch ungelöst ist, werde ich es definitiv ansprechen.
MikeSchinkel
@MikeSchinkel Ich arbeite derzeit noch an dem Projekt. Wenn Sie Ihr Tool also bereits fertiggestellt haben, würde ich es gerne ausprobieren und meine Erfahrungen teilen.
Sampson
Hallo @ Jonathan Sampson : Ich bin noch nicht bereit, es zu veröffentlichen, aber ich kann privat mit Ihnen als meinem ersten Beta-Tester zusammenarbeiten, wenn Sie möchten. Kontaktieren Sie mich per E-Mail, meine E-Mail-Adresse befindet sich auf meiner Benutzerprofilseite: wordpress.stackexchange.com/users/89/mikeschinkel
MikeSchinkel

Antworten:

4

Hallo @ Jonathan Sampson :

Es gibt verschiedene Plugins, um benutzerdefinierte Beitragstypen zu vereinfachen, und einige ermöglichen es Ihnen, benutzerdefinierte Felder in keiner bestimmten Reihenfolge zu definieren:

Wie oben erwähnt, habe ich an einer gearbeitet, die keine solche Benutzeroberfläche für eine erweiterbare API für komplexe Feldtypen (und auch für einfache) bietet. Nachdem ich eine Stunde lang versucht hatte, sie zu verpacken, wurde mir klar, dass sie noch nicht fertig ist zur Verteilung noch. Vielleicht in ein paar Wochen.

Diese oben aufgeführten Plugins sollten vorerst Ihre Grundbedürfnisse erfüllen, und ich werde versuchen, meine Plugins in Zukunft mit den von all diesen gespeicherten Daten kompatibel zu machen, falls Sie sich entscheiden, meine in Zukunft zu verwenden.

Vielleicht finden Sie in diesem Beitrag auch ein bisschen Hilfe:

MikeSchinkel
quelle
Ich werde diese Frage als Favorit markieren und auf Ihre Lösung warten;)
Ariefbayu
@silent : Cool!
MikeSchinkel
5

Sie können meta_boxes hinzufügen, um die benutzerdefinierten Felddaten darin zu speichern. Da add_meta_box gemäß post_type festgelegt werden kann, können Sie verschiedenen post-Typen unterschiedliche meta_box hinzufügen.

In diesem Beitrag finden Sie ein vollständiges Beispiel für die Änderung des benutzerdefinierten Beitragstyps new / edit scree.

hannit cohen
quelle
0

Ich musste kürzlich ein sehr ähnliches Problem ansprechen, während ich innerhalb eines Themas arbeitete. Die Basis des Codes war von diesem Beitrag und ich hatte einen Teil des Codes geändert

Das Folgende ist der erste Teil des Codes, den ich geändert habe.

    add_action('init', 'limited_post_type');
function my_custom_limited_post_type() 
{
  $labels = array(
    'name' => _x('Limited Post Type', 'post type general name'),
    'singular_name' => _x('Film - DVD', 'post type singular name')
  );
  $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);
}

Das Folgende ist der zweite Teil des Codes, den ich geändert habe.

foreach ( $scope as $scopeItem ) {
       switch ( $scopeItem ) {
           case "post": {
             // Output on any post screen
             if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" || $post->post_type=="post" )
             $output = true;
             break;}              
            case "page": {
                  // Output on any page screen
                  if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="page-new.php" || $post->post_type=="page" )
            $output = true;
            break;}
             case "limited_post_type": {
                                // Output on limited post_type onlye
            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;
                  }

Wenn Sie möchten, senden Sie mir bitte eine Nachricht und ich sende Ihnen gerne meine Datei functions.php als Referenz. Dies ist definitiv der Weg, um dies zu erreichen, da ich viele Nächte lang Haare gezogen habe, wie Sie selbst.

jnolte
quelle