wp_editor textarea value não está atualizando

14

Estou usando a ação *_add_form_fields para adicionar campos a uma taxonomia personalizada. Um desses campos é um wp_editor ().

O problema que estou enfrentando é que quando eu saio o editor do WordPress na página da seguinte forma:

wp_editor('test', 'mydescription', array('textarea_name' => 'my_description')); 

e, em seguida, se eu clicar no editor na página e alterar o valor padrão de test para something else , a variável $_POST['my_description'] ainda será definida como test

Devo adicionar uma configuração adicional ao meu editor? Existe uma razão pela qual não consigo alterar o valor da área de texto?

EDITAR

Abaixo está um caso de teste muito simples que mostra isso acontecendo. Coloque isso no arquivo functions.php e crie uma nova tag . O valor postado para "minha_descrição" não será alterado.

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();

EDITAR

Isso acontece apenas quando se anexa a ação "created_term". Se você anexar a "edited_terms" ele funciona como esperado e acho que isso é resultado do ajax sendo usado na página do termo de criação ... Eu atualizei o código de teste para mostrar isso.

    
por Mike 20.01.2012 / 19:45

3 respostas

19
O elemento

tinyMCE <textarea> é inicialmente invisível à função serializada usada:

$.post(
    ajaxurl,
    $('#addtag').serialize(), function(r) {
        // Content here.
    }
});

Você precisará chamar tinyMCE.triggerSave() para torná-lo visível.

Abaixo está um pequeno snippet que deve fazer o seguinte:

jQuery('#submit').mousedown( function() {
    tinyMCE.triggerSave();
});

Isso em um arquivo externo, enfileirado com wp_enqueue_script() ; funcionou para o teste que realizei.

    
por ungestaltbar 26.01.2012 / 16:51
4

Na sua função edited_terms , você precisa salvar o valor e em add_tag_form_fields você precisa substituir seu test pelos dados salvos.

algo como:

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();

Agora, se você quiser uma maneira muito mais fácil de adicionar campos extras de todos os tipos às suas tags / categorias ou formulários de edição de taxonomia personalizada sem reinventar a roda, dê uma olhada em TAX Meta Class

    
por Bainternet 24.01.2012 / 00:36
1

De acordo com o codex do wp_editor , o primeiro argumento deve ser o conteúdo. Então, ao invés de 'teste' você deve colocar $_POST['my_description'] se é isso que você gostaria que o conteúdo inicial fosse.

    
por ractoon 20.01.2012 / 20:25

Tags