O valor da área de texto wp_editor não está sendo atualizado

16

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

O problema que estou enfrentando é que, quando eu mostro o editor do WordPress na página, da seguinte maneira:

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

e se eu clicar no editor na página e alterar o valor padrão de testpara something elsea $_POST['my_description']variável ainda está definido comotest

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

EDITAR

Abaixo está um caso de teste muito simples que mostra isso acontecendo. Coloque isso no seu 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 SOMENTE ao anexar à ação "created_term". Se você anexar a "editado_termos", ele funcionará conforme o esperado e acho que isso é resultado do uso do ajax na página de criação de termo ... Atualizei o código de teste para mostrar isso.

Mike
fonte
Isso mudou para mim: Array ( [action] => add-tag [screen] => edit-post_tag [taxonomy] => post_tag [post_type] => post [_wpnonce_add-tag] => 4f7d3df228 [_wp_http_referer] => /wp-admin/edit-tags.php?taxonomy=post_tag [tag-name] => Test99 [slug] => [description] => [my_description] => something else )talvez algo mais no seu código seja um problema?
23812 Rob Vermeer
veja a segunda edição. Parece que isso só acontece quando você "adiciona" um termo.
Mike

Respostas:

21

O <textarea> elemento tinyMCE é inicialmente invisível pela função de serialização usada:

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

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

Abaixo está um trecho simples que deve fazer o truque:

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

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

ungestaltbar
fonte
1
Isso não funciona para mim. Parece que os dados foram lançados; ENTÃO, seu código de função de clique é acionado.
Mike
você enfileirou o script na cabeça? se você o enfileirar no rodapé, ele será carregado após o wp-scripts e seria muito tarde.
ungestaltbar
em vez de 'clicar', você realmente pode vinculá-lo a $ ('# submit'). mousedown (...) :) nesse caso, não importa onde e quando o script é carregado.
ungestaltbar
Funcionou como um encanto obrigado!
nitigyan 22/03/19
4

Na sua edited_termsfunção, você precisa salvar o valor e, na sua função, add_tag_form_fields substituir a sua testpelos 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ê deseja uma maneira muito mais fácil de adicionar campos extras de todos os tipos às suas tags / categorias ou formulários personalizados de edição de taxonomia sem reinventar a roda, dê uma olhada TAX Meta Class

Bainternet
fonte
Veja meu segundo comentário, parece que isso só acontece ao adicionar um termo. E acho que isso é resultado do uso do ajax.
Mike
@ Mike que Ajax, onde você está usando Ajax?
Bainternet
Quando você adiciona uma nova categoria / termo, o WordPress usa o ajax para postar os dados e criar o novo termo. Por algum motivo, isso não permite que o elemento wp_editor tenha o valor correto. Experimente o código de teste na pergunta original.
Mike
1

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

ractoon
fonte
2
o problema não está no conteúdo exibido corretamente. É com a variável postada igual ao conteúdo original, mesmo se você alterar o conteúdo da área de texto para outra coisa.
Mike