Значение текстовой области wp_editor не обновляется

16

Я использую *_add_form_fieldsдействие, чтобы добавить поля в пользовательскую таксономию. Одним из этих полей является wp_editor ().

Проблема, с которой я сталкиваюсь, заключается в том, что при выводе редактора WordPress на страницу примерно так:

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

а затем , если я нажимаю в редакторе на странице и изменить значение по умолчанию из testк something elseв $_POST['my_description']переменной еще установленtest

Должен ли я добавить дополнительную настройку в мой редактор? Есть ли причина, по которой я не могу изменить значение текстовой области?

РЕДАКТИРОВАТЬ

Ниже приведен очень простой тестовый пример, демонстрирующий это. Поместите это в ваш файл functions.php, а затем создайте новый тег . Опубликованное значение для my_description не изменится.

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

РЕДАКТИРОВАТЬ

Это ТОЛЬКО происходит при присоединении к действию "creation_term". Если вы добавите «edited_terms», он будет работать как положено, и я думаю, что это результат использования ajax на странице создания термина ... Я обновил тестовый код, чтобы показать это.

Майк
источник
Для меня это изменилось: 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 )может быть, что-то еще в вашем коде проблема?
Роб Вермеер
см. второе редактирование. Похоже, это происходит только тогда, когда вы «добавляете» термин.
Майк

Ответы:

21

<textarea>Элемент tinyMCE изначально не виден используемой функцией serialize:

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

Вам нужно будет позвонить, tinyMCE.triggerSave()чтобы сделать его видимым.

Ниже приведен простой фрагмент кода, который должен помочь:

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

Это во внешнем файле, поставленном в очередь wp_enqueue_script(); это сработало для теста, который я провел.

ungestaltbar
источник
1
Это не работает для меня. Похоже, что данные опубликованы, ТОГДА ваш код функции клика срабатывает.
Майк
Вы поставили сценарий в голове? если вы поставите его в нижний колонтитул, он будет загружен после wp-скриптов, и это будет слишком поздно.
ungestaltbar
вместо 'click' вы можете привязать его к $ ('# submit'). mousedown (...) :), в этом случае не должно иметь значения, где и когда загружается скрипт.
ungestaltbar
Работал как шарм спасибо!
нитигян
4

В вашей edited_termsфункции вам нужно сохранить значение, а в вашей - add_tag_form_fields заменить testсохраненные данные.

что-то вроде:

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

Теперь, если вы хотите гораздо более простой способ добавления дополнительных полей всех типов в ваши теги / категории или формы редактирования пользовательских таксономий, не изобретая колесо, взгляните на TAX Meta Class

Bainternet
источник
Смотрите мой второй комментарий, похоже, что это происходит только при добавлении термина. И я думаю, что это результат использования ajax.
Майк
@ Майк, что Ajax, где вы используете Ajax?
Bainternet
При добавлении новой категории / термина WordPress использует ajax для публикации данных и создания нового термина. По некоторым причинам это не позволяет элементу wp_editor иметь правильное значение. Попробуйте тестовый код в оригинальном вопросе.
Майк
1

Согласно кодексу для wp_editor, первым аргументом должен быть контент. Так что вместо «test» вы должны поставить, $_POST['my_description']если вы хотите, чтобы исходный контент был именно таким.

ractoon
источник
2
проблема не в том, что содержимое отображается правильно. При этом переменная опубликованного значения совпадает с исходным содержимым, даже если вы измените содержимое textarea на другое.
Майк