Gewusst wie: Hinzufügen von benutzerdefinierten Feldern zu benutzerdefinierten Taxonomien in WordPress CLEANY

Zusätzliche Felder speichern, die zu einer Taxonomie hinzugefügt wurden. Ich möchte den geeignetsten und effizientesten Weg, dies zu tun. Wo sollte ich die neuen Felder speichern?

2 mögliche Lösungen sind zu

1) Verwenden Sie die WordPress-Optionstabelle wie hier beschrieben … Fügen Sie benutzerdefinierte Felder zu benutzerdefinierten Taxonomien hinzu . Dies ist zugegebenermaßen “nicht sauber” und wird nicht als die richtige Antwort angesehen.

// A callback function to save our extra taxonomy field(s) function save_taxonomy_custom_fields( $term_id ) { if ( isset( $_POST['term_meta'] ) ) { $t_id = $term_id; $term_meta = get_option( "taxonomy_term_$t_id" ); $cat_keys = array_keys( $_POST['term_meta'] ); foreach ( $cat_keys as $key ){ if ( isset( $_POST['term_meta'][$key] ) ){ $term_meta[$key] = $_POST['term_meta'][$key]; } } //save the option array update_option( "taxonomy_term_$t_id", $term_meta ); } } 

2) Fügen Sie eine neue Tabelle hinzu, wie hier in Customized Taxonomies in WordPress beschrieben, die der Namenskonvention ‘wp_’ + customtaxonomykey + ‘meta’ folgt.

3) Eine andere Option

Solutions Collecting From Web of "Gewusst wie: Hinzufügen von benutzerdefinierten Feldern zu benutzerdefinierten Taxonomien in WordPress CLEANY"

Option 2 ist die sauberste Methode, die ich auch mehrmals benutzt habe. Leider gibt es in WordPress noch keine Standard-Tabelle term_metadata. Dieser Beitrag behandelt auch den gleichen Ansatz, http://shibashake.com/wordpress-theme/add-term-or-taxonomy-meta-data

Und dazu gibt es natürlich auch ein Plugin 🙂 http://wordpress.org/extend/plugins/taxonomy-metadata/

Die beste Antwort ist (3) Eine andere Option .

Dies ist ein wenig unkonventionell, skaliert aber am besten, nutzt den core am meisten und erfordert kein Hinzufügen einer databasetabelle: Fügen Sie einen versteckten Posttyp für die Taxonomie hinzu. Jeder Term in der Taxonomie erhält im Post-Typ einen eigenen Post. Damit kann der Begriff Meta als Post-Meta gespeichert werden. Hier ist ein Beispiel für die Verwendung dieses Ansatzes .

Die Hauptprobleme bei jedem anderen Ansatz (einschließlich der Option “Verwenden des Begriffsfeldes für serialisierte Daten”) sind Skalierbarkeit, performance und Kompatibilität.

1) Standard wp_options Tabelle

Ich verstehe wirklich nicht, warum Leute vorschlagen

 update_option( "taxonomy_term_$t_id", $term_meta ); 

wenn wir eine einzige Option haben können, deren Indizes die Term ID und die benutzerdefinierten Felder als Werte sind

 $options = get_option( 'taxonomy_term_meta' ); $options[$t_id] = $term_meta; update_option( 'taxonomy_term_meta', $options ); 

und dann ziehen Sie einfach die Option und erhalten Sie den Wert für eine bestimmte Begriff ID gespeichert

 $options = get_option( 'taxonomy_term_meta' ); echo $options[$tax->term_id]; 

2) Benutzerdefinierte wp_taxonomymeta Tabelle

Das tut das Plug-in Taxonomy Metadata , das von James verlinkt wird. Und es ist ziemlich einfach, sobald diese Tabelle erstellt wird, beginnen die functionen add_ , get_ , update_ und delete_ metadata mit 'taxonomy' . Wie so:

 function add_term_meta($term_id, $meta_key, $meta_value, $unique = false) { return add_metadata('taxonomy', $term_id, $meta_key, $meta_value, $unique); } function delete_term_meta($term_id, $meta_key, $meta_value = '') { return delete_metadata('taxonomy', $term_id, $meta_key, $meta_value); } function get_term_meta($term_id, $key, $single = false) { return get_metadata('taxonomy', $term_id, $key, $single); } function update_term_meta($term_id, $meta_key, $meta_value, $prev_value = '') { return update_metadata('taxonomy', $term_id, $meta_key, $meta_value, $prev_value); } 

3) Helfer Beitragstyp

Wie in Matthew Boynes Antwort beschrieben (ich denke, jemand erwähnt das auch im Ticket # 10142.

4) Außerhalb der Box

Im Plugin-Code gibt es einen Link zum Core Ticket # 10142 , in dem alles besprochen wird . Es ist ein 4 Jahre altes Ticket, (closed)(maybelater) , viele Entwickler sind eingesprungen, aber es wurde keine Schlussfolgerung gezogen.

Am Ende haben wir dieses Nugget (meine Betonung):

Paco Pepe
Da ich dies regelmäßig brauche, habe ich meine eigene Lösung geschrieben: missbraucht das Feld “description” als Speichercontainer für ein serialisiertes Array. Die einzige Sache, die ein wenig schwierig war, war, die einfache Beschreibung in der Admin-Benutzeroberfläche anzuzeigen. Auf jeden Fall wäre das die Lösung, auf die ich gehofft hatte: Konvertiere einfach das Beschreibungsfeld, anstatt eine Menge neuer Felder hinzuzufügen. Wenn es nötig ist, werden wir die Anwendungsfälle sehen, nachdem wir sie bekommen haben, und uns für eine durchsuchbare Lösung mit einer späteren Version entscheiden.

Ziemlich clever.

https://wordpress.org/plugins/taxonomy-metadata/

Sie können durch das oben erwähnte Plugin angepasst werden ..

Sie können die Anhangs-ID in der Optionstabelle speichern und den Anhang anzeigen lassen

Es gibt drei Hauptfunktionen zum Hinzufügen der Metabox für Taxonomie. Diese werden über folgende Hooks aufgerufen:

  1. {taxonomy_name} _add_form_fields
  2. {taxonomy_name} _edit_form_fields
  3. editiert_ {taxonomy_name}
  4. create_ {Taxonomie_Name}

Hier können Sie den taxonomy_name mit jeder vordefinierten oder benutzerdefinierten Taxonomie entsprechend ändern. Ich verwende “Woocommerce-Produkttaxonomie” und erstellte ein Plugin für das selbe.Bitte überprüfen Sie die folgenden functionen, um ein benutzerdefiniertes Feld hinzuzufügen:

{taxonomy_name} _add_form_fields fügen ein neues benutzerdefiniertes Feld hinzu, um ein neues Ausdrucksseitenformular hinzuzufügen. Hier erstelle ich ein Feld, um eine class für einen Ausdruck hinzuzufügen.

Fügen Sie in der functions.php in Ihrem Design den folgenden Code hinzu

 public function mj_taxonomy_add_custom_meta_field() { ?> 

< ?php _e( 'Enter a value for this field','MJ' ); ?>

< ?php } add_action( 'product_cat_add_form_fields', 'mj_taxonomy_add_custom_field', 10, 2 );

{taxonomy_name} _edit_form_fields fügen ein Feld auf der Termbearbeitungsseite hinzu

 public function mj_taxonomy_edit_custom_meta_field($term) { $t_id = $term->term_id; $term_meta = get_option( "taxonomy_$t_id" ); ?>     

< ?php _e( 'Enter a value for this field','MJ' ); ?>

< ?php } add_action( 'product_cat_edit_form_fields','mj_taxonomy_edit_custom_meta_field', 10, 2 ); public function mj_save_taxonomy_custom_meta_field( $term_id ) { if ( isset( $_POST['term_meta'] ) ) { $t_id = $term_id; $term_meta = get_option( "taxonomy_$t_id" ); $cat_keys = array_keys( $_POST['term_meta'] ); foreach ( $cat_keys as $key ) { if ( isset ( $_POST['term_meta'][$key] ) ) { $term_meta[$key] = $_POST['term_meta'][$key]; } } // Save the option array. update_option( "taxonomy_$t_id", $term_meta ); } } add_action( 'edited_product_cat', 'mj_save_taxonomy_custom_meta_field', 10, 2 ); add_action( 'create_product_cat', 'mj_save_taxonomy_custom_meta_field', 10, 2 );