J'utilise l'action *_add_form_fields
pour ajouter des champs à une taxonomie personnalisée. Un de ces champs est un wp_editor ().
Le problème auquel je suis confronté est que lorsque je produis l'éditeur WordPress sur la page, comme ceci:
wp_editor('test', 'mydescription', array('textarea_name' => 'my_description'));
et puis, si je clique dans l'éditeur sur la page et que je change la valeur par défaut de test
à something else
, la variable $_POST['my_description']
est toujours définie sur test
Devrais-je ajouter un paramètre supplémentaire à mon éditeur? Y a-t-il une raison pour laquelle je ne peux pas changer la valeur de la zone de texte?
MODIFIER
Vous trouverez ci-dessous un cas de test très simple qui montre que cela se produit. Placez ceci dans votre fichier functions.php puis créez un nouveau tag . La valeur affichée pour 'my_description "ne changera pas.
class Test{
function __construct() {
add_action('add_tag_form_fields', array($this, 'add_tag_form_fields'));
add_action('created_term', array($this, 'created_term'));
}
function add_tag_form_fields($tag){
if ( current_user_can( 'publish_posts' ) ): ?>
<div class="form-field">
<?php wp_editor('test', 'mydescription', array('textarea_name' => 'my_description')); ?>
</div>
<?php
}
function created_term($tag){
echo '<pre>';
print_r($_POST);
echo '</pre>';
die();
}
}
new Test();
MODIFIER
Cela se produit UNIQUEMENT lors de l'attachement à l'action "created_term". Si vous attachez à "edited_terms", cela fonctionne comme prévu et je pense que cela résulte de l'utilisation d'ajax sur la page de création du terme ... J'ai mis à jour le code de test pour l'indiquer.
tinyMCE <textarea>
élément initialement invisible par la fonction sérialiser utilisée:
$.post(
ajaxurl,
$('#addtag').serialize(), function(r) {
// Content here.
}
});
Vous devrez appeler tinyMCE.triggerSave()
pour le rendre visible.
Ci-dessous, un extrait simple qui devrait faire l'affaire:
jQuery('#submit').mousedown( function() {
tinyMCE.triggerSave();
});
Ceci dans un fichier externe, mis en file d'attente avec wp_enqueue_script()
; cela a fonctionné pour le test que j'ai effectué.
Dans votre fonction edited_terms
, vous devez enregistrer la valeur et dans votre add_tag_form_fields
, vous devez remplacer votre test
par les données enregistrées.
quelque chose comme:
class Test{
function __construct() {
//do_action('add_tag_form_fields', $taxonomy);
add_action('add_tag_form_fields', array($this, 'add_tag_form_fields'));
//do_action("edited_terms", $term_id, $tt_id, $taxonomy);
add_action('edited_terms', array($this, 'edited_terms'));
}
function add_tag_form_fields($term){
if ( current_user_can( 'publish_posts' ) ): ?>
<div class="form-field">
<?php
$saved = get_option('termmeta_'.$term->term_id);
$saved = (empty($saved))? 'test': $saved;
wp_editor($saved, 'mydescription', array('textarea_name' => 'my_description')); ?>
</div>
<?php
}
function edited_terms($term_id){
if (isset($_POST['mydescription'])){
update_option('termmeta_'.$term_id,$_POST['mydescription']);
}
}
}
new Test();
Maintenant, si vous voulez un moyen beaucoup plus facile d’ajouter des champs supplémentaires de tous types à vos balises/catégories ou formulaires de modification de taxonomie personnalisés sans réinventer la roue, jetez un oeil à TAX Meta Class
Selon le codex pour wp_editor , le premier argument devrait être le contenu. Donc, plutôt que de "tester", vous devriez mettre $_POST['my_description']
si c'est ce que vous voudriez que le contenu initial soit.