Значення текстової області 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

Чи слід додавати до мого редактора додаткові налаштування? Чи є причина, чому я не можу змінити значення textarea?

EDIT

Нижче наведено дуже простий тестовий випадок, який показує, що це відбувається. Помістіть це у файл function.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();

EDIT

Це ТІЛЬКИ відбувається під час приєднання до дії "created_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 спочатку не бачить використовуваної функції серіалізації:

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

Вам потрібно буде зателефонувати, tinyMCE.triggerSave()щоб зробити його видимим.

Нижче наводиться простий фрагмент, який повинен зробити трюк:

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

Це у зовнішньому файлі, зачепленому з wp_enqueue_script(); це працювало на тест, який я провів.


1
Це не працює для мене. Здається, дані розміщені, ТОГО запускається код функції клацання.
Майк

ти завоював сценарій у голові? якщо запхнути його у колонтитул, він буде завантажений після wp-скриптів, і це буде занадто пізно.
ungestaltbar

замість "клацання" ви насправді можете прив'язати його до $ ("# submit"). mousedown (...) :) у цьому випадку це не має значення, де і коли завантажується сценарій.
ungestaltbar

Працював як шарм дякую!
nitigyan

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


Дивіться мій другий коментар, виявляється, що це відбувається лише при додаванні терміна. І я думаю, що це результат цього за допомогою ajax.
Майк

@Mkeke що Ajax, де ти використовуєш Ajax?
Бейнтернет

Коли ви додаєте нову категорію / термін, WordPress використовує ajax для розміщення даних та створення нового терміна. Чомусь це не дозволяє елементу wp_editor мати правильне значення. Спробуйте код тесту в оригінальному запитанні.
Майк

1

Відповідно до кодексу для wp_editor першим аргументом повинен бути вміст. Тож замість "тесту" ви повинні ставити, $_POST['my_description']якщо саме так ви хотіли б бути початковим вмістом.


2
проблема не в тому, що вміст відображається правильно. Це з розміщеною змінною, яка є такою ж, як і вихідний вміст, навіть якщо ви зміните вміст текстової області на щось інше.
Майк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.