Je travaille sur une modification d'une taxonomie personnalisée qui permettrait aux gestionnaires de contenu de spécifier un ordre numérique dans lequel les termes doivent apparaître dans un widget. Ils ne peuvent pas compter sur l'ordre alphabétique dans ce cas. J'ai utilisé ce tutoriel pour ajouter une entrée [type = nombre] à l'entrée et modifier des formulaires, et cela fonctionne très bien. Le problème survient lors de l'ajout ou de la modification d'un terme afin de sauvegarder la commande. Voici le code:
public function sanitize_term_order($number) {
return is_numeric($number) ? absint($number) : 1;
}
public function add_order_to_service_hierarchy_when_adding() {
$field = $this->controller->hierarchy_tax . "-term-order"; ?>
<div class="form-field form-field-custom term-group <?php echo $field ?>">
<label for="<?php echo $field ?>">Term Order</label>
<input type="number" step="1" min="1" name="<?php echo $field ?>" id="<?php echo $field ?>" value="1">
<?php wp_nonce_field(basename(__FILE__), $field . "-nonce") ?>
</div>
<?php }
public function add_order_to_service_hierarchy_when_editing($term) {
$field = $this->controller->hierarchy_tax . "-term-order";
$value = get_term_meta($term->term_id, $field, true);
if (!is_numeric($value)) {
$value = 1;
} ?>
<tr class="form-field form-field-custom term-group-wrap <?php echo $field ?>">
<th scope="row"><label for="<?php echo $field ?>">Term Order</label></th>
<td>
<input type="number" step="1" min="1" name="<?php echo $field ?>" id="<?php echo $field ?>" value="<?php echo $value ?>">
<?php wp_nonce_field(basename(__FILE__), $field . "-nonce") ?>
</td>
</tr>
<?php }
public function save_hierarchy_term_order($term_id) {
$field = $this->controller->hierarchy_tax . "-term-order";
if (isset($_POST[$field . "-nonce"]) && wp_verify_nonce($_POST[$field . "-nonce"], basename(__FILE__))) {
$value = $this->sanitize_term_order($_POST[$field]);
echo ("field: $field<br>value: $value<br>term_id: $term_id<br><br>");
$results = update_term_meta((int)$term_id, $field, $value);
die(var_dump($results));
}
}
Et voici un exemple de ce à quoi ressemblent les résultats:
field: service-hierarchy-term-order
value: 2
term id: 58
bool(false)
J'ai ajouté des filtres et des actions à tous les points d'ancrage présents dans taxonomy.php
et meta.php
que je pourrais trouver et qui s'appellent après que j'ai utilisé update_term_meta()
dans mon code. J'ai essayé d'utiliser add_term_meta()
et update_term_meta()
séparément pour voir si cela aiderait. J'ai changé le nom du champ pour voir s'il y avait une restriction de longueur masquée alors que VARCHAR (255) était la longueur de la colonne meta_key de la base de données.
Et pas de chance. Pour le moment, pour que je puisse continuer le développement, j'ai résolu le problème en utilisant des options de site (c'est-à-dire update_option($field ."-". $term_id, $value)
) qui fonctionneront, mais je préférerais comprendre pourquoi le terme méta-fonction échoue.
Des pensées?
Cela s'est avéré être un problème de base de données.
En raison de certaines mesures de sécurité mises en place par l'équipe d'infrastructure, le script de mise à niveau du réseau n'a pas pu terminer la mise à niveau sur tous les sites. Ainsi, pour le site spécifique de notre réseau WordPress sur lequel ce plugin était testé, la table wp_termmeta n’avait pas été créée. Nous avons travaillé avec notre équipe pour annuler ce qu'ils avaient fait, refaire la mise à niveau du réseau et tout va bien.