Wie füge ich benutzerdefinierte Felder zu einem benutzerdefinierten Beitragstyp hinzu?

18

Ok, also habe ich ein paar benutzerdefinierte Beitragstypen und ein paar Taxonomien registriert. Jetzt kann ich den Code, den ich zum Hinzufügen eines benutzerdefinierten Felds zu meinem benutzerdefinierten Beitragstyp benötige, für mein ganzes Leben nicht herausfinden.

Ich brauche ein Dropdown-Menü und einen einzeiligen Textbereich. Ich muss aber auch separate Felder für Beitragstypen haben. Angenommen, der erste Beitragstyp hat 3 Felder und der zweite Beitragstyp hat 4 Felder, aber die Felder sind unterschiedlich.

Alle möglichen Tipps helfen mir, den Codex zu lesen und etwas zu finden, aber ich kann nicht verstehen, was ich meiner functions.phpDatei hinzufügen muss

xLRDxREVENGEx
quelle
Verwenden Sie wordpress.org/extend/plugins/types
Ajay Patel

Antworten:

19

Dies ist wahrscheinlich komplizierter als Sie denken. Ich würde die Verwendung eines Frameworks untersuchen:

Wenn Sie selbst schreiben möchten, finden Sie hier einige anständige Tutorials:

Wyck
quelle
1
Es wäre wirklich so schwer. Ich dachte, es wäre so einfach wie das Hinzufügen eines Registercodes zu meinen Funktionen, wie wir es bei Posttypen und Taxonomien tun.
xLRDxREVENGEx
1
Ich werde diese Antwort plus eins, aber es ist nicht zu komplex. Über den Link thinkvitamin.com können Sie hervorragend erklären, wie die Metaboxen hinzugefügt und gespeichert werden. Der Link sltaylor.co.uk ist ein großartiges Tutorial zur Verwendung einiger großartiger Codierungsmethoden. Bei der Verwendung des save_postHakens ist Vorsicht geboten . Es heißt zu seltsamen Zeiten. Stellen Sie sicher, dass die Variable WP_DEBUG auf true gesetzt ist, um mögliche Fehler bei der Verwendung anzuzeigen.
tollmanz
1
Nur ein Update, das ich über den thinkvitamin-Link durchgeführt habe und das hat enorm geholfen und es war ein
Kinderspiel
25

Fügen Sie das supportsArgument hinzu / bearbeiten Sie es (während Sie es verwenden register_post_type), um den custom-fieldsBearbeitungsbildschirm Ihres benutzerdefinierten Beitragstyps einzuschließen:

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

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

kubante
quelle
2
Können Sie bitte erklären, warum dies das Problem lösen könnte?
s_ha_dum
1
Ja das funktioniert Wer hat die Antwort gegeben? Kannst du es bitte zurücknehmen? Grüße,
Junaid Qadir
6
...und dann.........?
Mark
9

Obwohl Sie eine Validierung hinzufügen müssen, scheint diese Aktion für die aktuelle Version von WordPress nicht kompliziert zu sein.

Grundsätzlich benötigen Sie zwei Schritte, um einem benutzerdefinierten Beitragstyp ein benutzerdefiniertes Feld hinzuzufügen:

  1. Erstellen Sie eine Metabox, die Ihr benutzerdefiniertes Feld enthält
  2. Speichern Sie Ihr benutzerdefiniertes Feld in der Datenbank

Diese Schritte werden hier global beschrieben: http://wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type

Beispiel:

Fügen Sie einem benutzerdefinierten Beitragstyp mit der Bezeichnung "Präfix-Teammitglieder" ein benutzerdefiniertes Feld mit der Bezeichnung "Funktion" hinzu.

Zuerst die Metabox hinzufügen:

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' );

Wenn Sie ein "Präfix-Teammitglied" hinzufügen oder bearbeiten, wird der add_meta_boxes_{custom_post_type}Hook ausgelöst. Die Funktion finden Sie unter http://codex.wordpress.org/Function_Reference/add_meta_boxadd_meta_box() . Im obigen Aufruf von add_meta_box()ist prefix_teammembers_metaboxes_htmlein Rückruf, um Ihr Formularfeld hinzuzufügen:

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
}

Im zweiten Schritt haben Sie Ihr benutzerdefiniertes Feld in der Datenbank. Beim Speichern wird der save_post_{custom_post_type}Hook ausgelöst (seit v 3.7, siehe: /programming/5151409/wordpress-save-post-action-for-custom-posts ). Sie können dies einhängen, um Ihr benutzerdefiniertes Feld zu speichern:

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' );   
Bass Jobsen
quelle
"warum wird prefix_teammembers_save_post durch add new ausgelöst?" Haben Sie eine Antwort gefunden? Ich bin auch auf einen zusätzlichen Funktionsauslöser gestoßen, an den ich mich nicht erinnern kann.
alex
"Füge ein benutzerdefiniertes Feld mit dem Namen" function "zu einem benutzerdefinierten Beitragstyp mit dem Namen" prefix-teammembers "hinzu." Was bedeutet "called"? Funktion. Oder vielleicht ist es egal, was es ist, solange es konsistent ist.
Arnoldbird
1

Es gibt verschiedene Plugins für benutzerdefinierte Meta-Boxen und benutzerdefinierte Felder. Wenn Sie sich ein Plugin ansehen, das sich auf Entwickler konzentriert, sollten Sie Meta Box ausprobieren . Es ist leicht und sehr leistungsstark.

Wenn Sie nach einem Tutorial zum Schreiben von Code für eine Meta-Box / benutzerdefinierte Felder suchen, ist dies ein guter Anfang. Dies ist der erste Teil einer Reihe, der Ihnen dabei helfen kann, den Code zu verfeinern, um die Erweiterung zu vereinfachen.

Anh Tran
quelle
-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' );

Perfektes Wissen

DTIndien
quelle