Valoarea textarea din wp_editor nu se actualizează
Folosesc acțiunea *_add_form_fields
pentru a adăuga câmpuri la o taxonomie personalizată. Unul dintre aceste câmpuri este un wp_editor().
Problema pe care o întâmpin este că atunci când afișez editorul WordPress pe pagină astfel:
wp_editor('test', 'mydescription', array('textarea_name' => 'my_description'));
și apoi dacă dau click în editor pe pagină și schimb valoarea implicită de la test
la altceva
, variabila $_POST['my_description']
rămâne setată la test
.
Trebuie să adaug setări suplimentare editorului meu? Există vreun motiv pentru care nu pot schimba valoarea textarea-ului?
EDITARE
Mai jos este un caz de test foarte simplu care arată această problemă. Puneți acest cod în fișierul functions.php și apoi creați un nou tag. Valoarea postată pentru 'my_description' nu se va schimba.
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();
EDITARE
Acest lucru se întâmplă DOAR când atașăm la acțiunea "created_term". Dacă atașați la "edited_terms" funcționează așa cum era de așteptat, și cred că aceasta este o consecință a faptului că se folosește ajax pe pagina de creare a termenului... Am actualizat codul de test pentru a arăta acest lucru.

Elementul tinyMCE <textarea>
inițial nu este vizibil pentru funcția de serializare utilizată:
$.post(
ajaxurl,
$('#addtag').serialize(), function(r) {
// Conținut aici.
}
});
Va trebui să apelați tinyMCE.triggerSave()
pentru a-l face vizibil.
Mai jos este un fragment simplu care ar trebui să rezolve problema:
jQuery('#submit').mousedown( function() {
tinyMCE.triggerSave();
});
Acest cod se află într-un fișier extern, încărcat cu wp_enqueue_script()
; a funcționat în testele pe care le-am efectuat.

Acest lucru nu funcționează pentru mine. Se pare că datele sunt trimise, APOI codul tău de funcție click este declanșat.

ai încărcat scriptul în head? dacă îl încarci în footer, acesta va fi încărcat după wp-scripts și ar fi prea târziu.

în loc de 'click' ai putea să-l legi la $('#submit').mousedown( ... ) :)
în acest caz, nu ar trebui să conteze unde și când este încărcat scriptul.

În funcția ta edited_terms
trebuie să salvezi valoarea, iar în funcția add_tag_form_fields
trebuie să înlocuiești test
cu datele salvate.
Ceva de genul:
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();
Dacă dorești o metodă mult mai ușoară de a adăuga câmpuri suplimentare de toate tipurile la formularele de editare a etichetelor/categoriilor sau a taxonomiilor personalizate fără a reinventa roata, aruncă o privire la TAX Meta Class

Vezi al doilea meu comentariu, se pare că acest lucru se întâmplă doar la adăugarea unui termen. Și cred că acest lucru este rezultatul utilizării ajax.

Conform codex-ului pentru wp_editor, primul argument ar trebui să fie conținutul. Deci, în loc de 'test', ar trebui să pui $_POST['my_description']
dacă acesta este conținutul inițial pe care dorești să îl afișezi.
