Wie füge ich ein zusätzliches Feld hinzu? Add new category part (ohne Verwendung von Plugins)

Ich möchte ein benutzerdefiniertes Feld hinzufügen, um eine neue Kategorie hinzufügen (in WP-admin). Das Ziel dieses Feldes wäre für Symbole (zB Benutzer einfügen font-awesome Symbol-class und es Symbol auf Front-End anzeigen).

Vielen Dank.

Solutions Collecting From Web of "Wie füge ich ein zusätzliches Feld hinzu? Add new category part (ohne Verwendung von Plugins)"

Das wird eine Tonne Code und eine Menge Erklärungen sein. Die meisten davon können Kopieren und Einfügen sein, aber ich schlage vor, dass Sie sich die Zeit nehmen, um zu verstehen, was vor sich geht und warum. Die erste Sache zu verstehen ist, dass WordPress Taxonomie Metadaten hat, aber es kann eines Tages . Dies bedeutet, dass wir unsere Daten als Optionen speichern müssen. Zweitens müssen wir uns mit mehreren Hooks beschäftigen:

  • {$ taxonomy} _add_form_fields – Die Seite, auf der wir die Begriffe hinzufügen.
  • {$ taxonomy} _edit_form_fields – Immer wenn ein Benutzer auf den Begriff klickt, um den Slug oder die Beschreibung nach der Erstellung zu bearbeiten.
  • created _ {$ taxonomy} – Speichert die Daten, wenn ein Taxonomiebegriff erstellt wird.
  • editiert _ {$ taxonomy} – Speichert die Daten, wenn ein Taxonomiebegriff geändert / bearbeitet wird.
  • pre_delete_term – Um unsere Daten zu bereinigen, wenn ein Begriff gelöscht wird.

Immer wenn du {$ taxonomy} siehst, würdest du es durch was auch immer taxonomy slug ersetzen würdest ersetzen. In diesem Beispiel verwende ich die standardmäßige / integrierte Post Categories Taxonomie, deren Slug eine category .

Die folgenden Abschnitte behandeln nicht das Hinzufügen der Felder zu Quick Edit oder Add New Term Metabox.


Beginnen wir mit der Anzeige des Textfelds, um classn zu akzeptieren. Da beide Seiten ihre Daten unterschiedlich anzeigen (und separate Parameter übergeben), müssen wir zwei separate functionen erstellen und sie {$taxonomy}_add_form_fields bzw. {$taxonomy}_edit_form_fields . Beide sind kommentiert, um etwas von unserem gewöhnlichen aufzuzeigen.

 /** * Category "Add New" Page - Add Additional Field(s) * @param string $taxonomy */ function category_fields_new( $taxonomy ) { // Function has one field to pass - Taxonomy ( Category in this case ) wp_nonce_field( 'category_meta_new', 'category_meta_new_nonce' ); // Create a Nonce so that we can verify the integrity of our data ?> 

Enter a custom font-awesome icon - List of Icons

< ?php } add_action( 'category_add_form_fields', 'category_fields_new', 10 ); /** * Category "Edit Term" Page - Add Additional Field(s) * @param Object $term * @param string $taxonomy */ function category_fields_edit( $term, $taxonomy ) { // Function has one field to pass - Term ( term object) and Taxonomy ( Category in this case ) wp_nonce_field( 'category_meta_edit', 'category_meta_edit_nonce' ); // Create a Nonce so that we can verify the integrity of our data $category_icon = get_option( "{$taxonomy}_{$term->term_id}_icon" ); // Get the icon if one is set already ?>

Enter a custom Font-Awesome icon - List of Icons

< ?php } add_action( 'category_edit_form_fields', 'category_fields_edit', 10, 2 );

Der nächste Schritt besteht darin, unsere Optionen zu speichern. Da das Erstellen von Kategorien und das Bearbeiten von Kategorien beim Speichern auf die gleiche Weise erfolgt, verwenden wir dieselbe function für beide. Wir müssen weiterhin die created_{$taxonomy} und edited_{$taxonomy} . Wie oben erwähnt, müssen wir, da Taxonomie-Metadaten nicht existieren, unsere Daten in der Optionstabelle speichern, die einen eindeutigen Namen benötigt. Deshalb geben wir unserer Option einen eindeutigen Namen von {$taxonomy}_{$term_id}_icon was in diesem Beispiel in category_1_icon übersetzt wird.

 /** * Save our Additional Taxonomy Fields * @param int $term_id */ function save_category_fields( $term_id ) { /** Verify we're either on the New Category page or Edit Category page using Nonces **/ /** Verify that a Taxonomy is set **/ if( isset( $_POST['taxonomy'] ) && isset( $_POST['category_icon'] ) && ( isset( $_POST['category_meta_new_nonce'] ) && wp_verify_nonce( $_POST['category_meta_new_nonce'], 'category_meta_new' ) || // Verify our New Term Nonce isset( $_POST['category_meta_edit_nonce'] ) && wp_verify_nonce( $_POST['category_meta_edit_nonce'], 'category_meta_edit' ) // Verify our Edited Term Nonce ) ) { $taxonomy = $_POST['taxonomy']; $category_icon = get_option( "{$taxonomy}_{$term_id}_icon" ); // Grab our icon if one exists if( ! empty( $_POST['category_icon'] ) ) { // IF the user has entered text, update our field. update_option( "{$taxonomy}_{$term_id}_icon", htmlspecialchars( sanitize_text_field( $_POST['category_icon'] ) ) ); // Sanitize our data before adding to the database } elseif( ! empty( $category_icon ) ) { // Category Icon IS empty but the option is set, they may not want an icon on this category delete_option( "{$taxonomy}_{$term_id}_icon" ); // Delete our option } } // Nonce Conditional } // End Function add_action ( 'created_category', 'save_category_fields' ); add_action ( 'edited_category', 'save_category_fields' ); 

Schließlich müssen wir unsere Optionen aufräumen. Postmeta löscht sich selbst, wenn ein Beitrag gelöscht wird, Optionen nicht. Wir müssen diese manuell löschen, damit unsere Optionstabellen nicht mit verwaisten Optionen aufgebläht werden.

 /** * Essential Cleanup of our Options * @param int $term_id * @param string $taxonomy */ function remove_term_options( $term_id, $taxonomy ) { delete_option( "{$taxonomy}_{$term_id}_icon" ); // Delete our option } add_action( 'pre_delete_term', 'remove_term_options', 10, 2 ); 

Wenn wir jedes Symbol anzeigen möchten, das gerade zugewiesen wurde. Da wir einen eindeutigen Optionsnamen unter Verwendung der Taxonomie und der Term-ID generieren, würden wir die Optionen mit derselben Formel erhalten. Lasst uns zuerst unsere Bedingungen bekommen, dann lasst uns unsere Bedingungen durchgehen.

 $terms = get_terms( // Returns an array of Term Objects, 'category', // Pass our Taxonomy array( // Pass our Arguments 'hide_empty' => false // Show ALL Terms ) ); if( ! empty( $terms ) ) { // Make sure we have some terms to loop through foreach( $terms as $term ) { // Loop through each term $icon = get_option( "{$term->taxonomy}_{$term->term_id}_icon" ); // Use our formula to grab the Icon - This translate to "category_1_icon" echo "Category {$term->name} Icon: {$icon}
"; // Display our Category Icon } }