Category: Actualités
Ajout de champs méta personnalisés aux taxonomies
Lorsqu’il s’agit d’ajouter des champs méta personnalisés à une taxonomie dans WordPress, le processus nécessite généralement trois fonctions distinctes : une pour ajouter le champ à la page “Ajouter un nouveau terme”, une pour ajouter le champ à la page “Modifier le terme”, et une pour enregistrer les valeurs du champ personnalisé sur les deux pages.
Voici comment réaliser cela avec un exemple pratique :
<?/**
* Summary.
*
* Description : Ajout de champs méta personnalisés aux taxonomies
*
* @since Version 1.0.0
*/
// Fonction pour ajouter un champ méta personnalisé à la page "Ajouter un nouveau terme"
function jconcept_taxonomy_add_new_meta_field() {
?>
<div class="form-field">
<label for="term_meta[custom_term_meta]"><?php _e('Exemple de champ méta', 'jconcept'); ?></label>
<input type="text" name="term_meta[custom_term_meta]" id="term_meta[custom_term_meta]" value="">
<p class="description"><?php _e('Entrez une valeur pour ce champ', 'jconcept'); ?></p>
</div>
<?php
}
add_action('category_add_form_fields', 'jconcept_taxonomy_add_new_meta_field', 10, 2);
// Fonction pour ajouter un champ méta personnalisé à la page "Modifier le terme"
function jconcept_taxonomy_edit_meta_field($term) {
$t_id = $term->term_id;
$term_meta = get_option("taxonomy_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="term_meta[custom_term_meta]"><?php _e('Exemple de champ méta', 'jconcept'); ?></label></th>
<td>
<input type="text" name="term_meta[custom_term_meta]" id="term_meta[custom_term_meta]" value="<?php echo esc_attr($term_meta['custom_term_meta']) ? esc_attr($term_meta['custom_term_meta']) : ''; ?>">
<p class="description"><?php _e('Entrez une valeur pour ce champ', 'jconcept'); ?></p>
</td>
</tr>
<?php
}
add_action('category_edit_form_fields', 'jconcept_taxonomy_edit_meta_field', 10, 2);
// Fonction pour enregistrer les valeurs du champ personnalisé
function save_taxonomy_custom_meta($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];
}
}
update_option("taxonomy_$t_id", $term_meta);
}
}
add_action('edited_category', 'save_taxonomy_custom_meta', 10, 2);
add_action('create_category', 'save_taxonomy_custom_meta', 10, 2);
Ces fonctions ajoutent un champ méta personnalisé à la page “Ajouter un nouveau terme” et à la page “Modifier le terme” pour la taxonomie de catégorie par défaut. Assurez-vous d’ajuster le code en fonction de votre taxonomie spécifique. Ces champs méta peuvent être utilisés pour stocker des informations personnalisées associées à chaque terme de taxonomie.
Ajouter une taxonomie déjà enregistrée au type de publication personnalisé
Lorsque vous utilisez un type de publication personnalisé dans vos plugins ou thèmes, vous pourriez souhaiter associer des taxonomies déjà enregistrées, telles que les balises de publication et les catégories par défaut, à votre type d’objet personnalisé. L’extrait de code suivant vous guide sur la manière d’accomplir cela.
En utilisant la fonction register_taxonomy_for_object_type()
, nous spécifions la taxonomie et le type d’objet, puis nous attachons cette fonction à un hook d’initialisation.
add_action('init', 'add_categories_to_cpt');
function add_categories_to_cpt() { register_taxonomy_for_object_type('category', 'post_type_name'); }
Ce code fonctionne généralement bien, mais dans certaines situations, le hook d’initialisation peut ne pas être toujours optimal. Si votre type de publication personnalisé est créé dans un plugin, il peut être préférable d’utiliser le hook plugins_loaded
, qui se déclenche une fois que tous les plugins ont été chargés.
add_action('plugins_loaded', 'add_categories_to_cpt');
function add_categories_to_cpt() { register_taxonomy_for_object_type('category', 'post_type_name'); }
En utilisant plugins_loaded
, vous vous assurez que votre code s’exécute après le chargement de tous les plugins, évitant ainsi les conflits potentiels. Cette approche est particulièrement utile lorsque votre type de publication personnalisé est défini dans un plugin. N’oubliez pas d’ajuster 'post_type_name'
avec le nom de votre type de publication personnalisé.